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


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


 #endif

ASSERT ( iCurr < ( BUFF_SIZE _ 200)); 

// Начать поиск адреса исключения.

PIMAGEHLP_SYMBOL pSym = (PIMAGEHLP_SYMBOL)&g_stSymbol;

 FillMemory ( pSym, NULL, SYM_BUFF_SIZE);

pSym->SizeOfStruct = sizeof ( IMAGEHLP_SYMBOL);

pSym->MaxNameLength = SYM_BUFF_SIZE - sizeof ( IMAGEHLP_SYMBOL); 

DWORD dwDisp;

 if ( TRUE ==

SymGetSymFromAddr ( (HANDLE)GetCurrentProcessId () ,

 (DWORD)pExPtrs->ExceptionRecord->

ExceptionAddress ,

SdwDisp , 

pSym ) ) 

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

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

 // позволяет память.

 dwTemp = Istrlen ( pSym->Name);

// Удостовериться, что достаточно места для самого длинного

 // символа и смещения.

if ( (int)dwTemp > ( ( BUFF_SIZE _ iCurr) -

( MAX_SYM_SIZE +50) ))

 {

Istrcpyn ( g_szBuff + iCurr , 

pSym->Name , 

BUFF_SIZE - iCurr - 1 );

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

 szRet = g_szBuff; _leave; 

}

else

 {

if ( dwDisp > 0)

 {

iCurr += wsprintf ( g_szBuff + iCurr , 

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

pSym->Name , 

dwDisp ); 

}

else 

{

iCurr += wsprintf ( g_szBuff + iCurr, 

_T ( "%s ") pSym->Name ) ; 

}

else 

{

// Если символ не найден, то источник и номер строки 

// тоже не найдены, поэтому выходим сейчас.

 szRet = g_szBuff;

_leave; 

}

ASSERT ( iCurr < ( BUFF_SIZE _ 200));

 // Поиск исходного файла и номера строки.

 ZeroMemory ( &g_stLine, sizeof ( IMAGEHLP_LINE));

 g_stLine.SizeOfStruct = sizeof ( IMAGEHLP_LINE);

if ( TRUE ==

InternalSymGetLineFromAddr ( (HANDLE)

GetCurrentProcessId () , 

(DWORD)pExPtrs->

ExceptionRecord->

ExceptionAddress, 

SdwDisp ,

 &g_stLine )) 

{

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




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



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