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


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


// Форсировать флажок захватывающего процесса, независимо от

 // того, в какой операционной системе мы находимся. 

HANDLE hPID = (HANDLE)GetCurrentProcessId (); 

VERIFY ( BSUSymlnitialize ( (DWORD)hPID,

hPID , 

NULL , 

TRUE ));

 g_bSymEngInit = TRUE; 

}

// Очистить символьную информацию, если необходимо,

 void CleanupSymEng ( void) CrashHandler

{

if ( TRUE == g_bSymEngInit) 

{

VERIFY ( SymCleanup ( (HANDLE)GetCurrentProcessId ()));

 g_bSymEngInit = FALSE;

 } 

}

Чтобы установить свою функцию фильтра, просто вызовите функцию SetCrashHandierFiiter, которая сохраняет вашу функцию фильтра в статической переменной И вызывает функцию SetUnhandledExceptionFilter, чтобы установить реальный фильтр Исключений CrashHandlerExceptionFilter. Если вы не добавляете какие-то модули, которые ограничивают фильтрацию исключений, то CrashHandlerExceptionFilter будет всегда вызывать ваш фильтр, независимо от того, в каком модуле произошел тяжелый останов. Если никакие модули не были добавлены, то вызов вашего фильтра исключений соответствует проекту, поэтому, чтобы установить заключительную обработку исключений, надо использовать только один API-вызов. Лучше всего сразу же вызвать функцию SetCrashHandierFiiter и убедиться, что она вызывается с NULL-аргументом непосредственно перед разгрузкой вашего фильтра, что позволит удалить вашу функцию фильтра с помощью рассмотренного обработчика аварий.

Функция AddCrashHandierLimitModuie вызывается там, где вы добавляете модуль, чтобы ограничить обработку аварий. Все, что требуется передать данной функции — это дескриптор добавляемого модуля (через ее единственный параметр HMODULE hMod). Если нужно ограничить обработку аварий для нескольких модулей, просто вызовите AddCrashHandierLimitModuie для каждого модуля. Память для массива дескрипторов модулей распределяется из кучи главного процесса.

Если посмотреть на различные функции в листинге 9-5, то можно заметить, что в них нет вызовов каких-либо функций исполнительной (run-time) библиотеки C++.


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



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