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


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


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

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

dwTemp = Istrlen ( g_stLine.FileName);

 if ( (int)dwTemp > ( 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_stLine. LineNumber , 

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 GetFaultReason"); 

szRet = NULL;

 }

return ( szRet); 

}

BOOL _stdcall GetFaultReasonVB ( EXCEPTION_POINTERS * pExPtrs,

LPTSTR szBuff , UINT uiSize ) 

{

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

if ( TRUE == IsBadWritePtr ( szBuff, uiSize))

{

return ( FALSE); 

}

LPCTSTR szRet;  

__try 

{

szRet = GetFaultReason ( pExPtrs); 

ASSERT ( NULL != szRet);

 if ( NULL == szRet) 

{

_leave; 

}

Istrcpyn ( szBuff , 

szRet ,

min ( (UINT)Istrlen ( szRet) + 1, uiSize)); 

}

_except ( EXCEPTION_EXECUTE_HANDLER) 

{

szRet = NULL; 

}

return ( NULL != szRet); 

}

LPCTSTR BUGSUTIL_DLLINTERFACE _stdcall

GetFirstStackTraceString ( DWORD dwOpts ,

EXCEPTION_POINTERS * pExPtrs)

{

// Все проверки ошибок выполняются в функции 

// InternalGetStackTraceString

// Инициализировать структуру STACKFRAME . 

ZeroMemory ( &g_stFrame, sizeof ( STACKFRAME));

#ifdef _X86_

g_stFrame.AddrPC.Offset = pExPtrs->ContextRecord->Eip;

 g_stFrame.AddrPC.Mode  = AddrModeFlat ; 




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



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