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


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


return ( NULL); 

}

// Переменная, которая содержит возвращаемое значение

 LPCTSTR szRet;

 _try 

{

// Инициализировать символьную машину в случае, если она

 //не инициализирована. 

InitSymEng (); 

// Текущая позиция в буфере

int iCurr = 0;

// Временное хранилище значения. Оно позволяет свести 

// использование стека к минимуму.

 DWORD dwTemp;

iCurr += BSUGetModuleBaseName ( GetCurrentProcess (),

NULL 

, g_szBuff , 

BUFF_SIZE );

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

 dwTemp = (DWORD)

ConvertSimpleException ( pExPtrs->ExceptionRecord->

ExceptionCode);

 if ( NULL != dwTemp)

 {

iCurr += wsprintf ( g_szBuff + iCurr, _T ( "%s") dwTemp );

 }

else 

{

iCurr += ( FormatMessage ( FORMAT_MESSAGE_IGNORE_INSERTS |

FORMAT_MESSAGE_FROM_HMODULE,

 GetModuleHandle (_T("NTDLL.DLL")), 

pExPtrs->ExceptionRecord->

ExceptionCode,

0,

g_szBuff + iCurr ,

 BUFF_SIZE,

0 )

 * sizeof ( TCHAR)); 

}

ASSERT ( iCurr < ( BUFF_SIZE - MAX_PATH));

iCurr += wsprintf ( g_szBuff + i.Curr, _T ( " in module ") ) ;

 dwTemp =

SymGetModuleBase ( (HANDLE)GetCurrentProcessId (),

(DWORD)pExPtrs->ExceptionRecord->

ExceptionAddress); 

ASSERT ( NULL != dwTemp);

 if ( NULL == dwTemp) 

{

iCurr += wsprintf ( g_szBuff + iCurr, _T ( "<UNKNOWN>")); 

}

else 

{

iCurr += BSUGetModuleBaseName ( GetCurrentProcess () ,

(HINSTANCE)dwTemp , 

g_szBuff + iCurr

 BUFF_SIZE - iCurr ); 

#ifdef _WIN64

iCurr += wsprintf ( g_szBuff + iCurr ,

 _T ( " at %016X") ,

pExPtrs->ExceptionRecord->ExceptionAddress); 

#else

iCurr += wsprintf ( g_szBuff + iCurr , 

_T ( " at %04X:%08X") ,

 pExPtrs->ContextRecord->SegCs ,

 pExPtrs->ExceptionRecord->ExceptionAddress);




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



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