Отладка приложений


Использование CrashHandler API - часть 13


// Вывести информацию исходного файла и номера строки?

 if ( GSTSO_SRCLINE == ( dwOpts & GSTSO_SRCLINE))

{

ZeroMemory ( &g_stLine, sizeof ( IMAGEHLP_LINE));

 g_stLine.SizeOfStruct = sizeof ( IMAGEHLP_LINE);

 if ( TRUE ==

InternalSymGetLineFromAddr ( (HANDLE)

GetCurrentProcessId (), 

g_stFrame.AddrPC.Offset , 

SdwDisp , 

&g_stLine ))

{

iCurr += wsprintf ( g_szBuff + iCurr, _T ( ", "));

 // Копировать не больше информации об исходном файле и 

// номере строки, чем позволяет память.

 dwTemp = Istrlen ( g_stLine.FileName); 

if ( dwTerap > (DWORD)( BUFF_SIZE - iCurr 

_ ( MAX_PATH +50 ))) {

Istrcpyn ( g_szBuff + iCurr ,

 g_stLine.FileName , 

BUFF_SIZE - iCurr - 1 );

 // Теперь можно выйти

 szRet = g_szBuff; 

_leave; 

}

else

 {

if { dwDisp > 0)

{

iCurr += wsprintf(g_szBuff + iCurr ,

_T("%s, line %04d+%04d byte(s)"),

g_stLine.FileName ,

g_s tLine.LineNumbe r ,

dwDisp ) ;

}

else

 {

iCurr += wsprintf ( g_szBuff + iCurr ,

 _T ( "%s, line %04d") ,

 g_stLine.FileName ,

 g_stLine.LineNumber ); 

}

}

 }

szRet = g_szBuff; 

}

_except ( EXCEPTION_EXECUTE_HANDLER)

 {

ASSERT ( !"Crashed in InternalGetStackTraceString"); 

szRet = NULL; 

}

return ( szRet); 

BOOL _stdcall

GetFirstStackTraceStringVB ( DWORD dwOpts ,

EXCEPTION_POINTERS * pExPtrs, 

LPTSTR szBuff , 

UINT uiSize ) 

{

ASSERT ( FALSE == IsBadWritePtr ( szBuff, uiSize));

if ( TRUE = IsBadWritePtr ( szBuff, uiSize))

{

return ( FALSE); 

}

LPCTSTR szRet; 

_try 

{

szRet = GetNextStackTraceString ( dwOpts, pExPtrs);

if ( NULL == szRet)

{

_leave;

 }

Istrcpyn ( szBuff , szRet ,

min ( (UINT)lstrlen ( szRet) + I, uiSize)); 

}

_except ( EXCEPTION_EXECUTE_HANDLER) 

{

szRet = NULL; 




Начало  Назад  Вперед



Книжный магазин