Поделиться через


Обработка исключений отладчика

Обработка исключений в пользовательском режиме обеспечивает поддержку сложных отладчиков. Если выполняется отладка процесса, в котором выполняется исключение, система создает событие отладки. Если отладчик использует функцию WaitForDebugEvent, событие отладки приводит к возврату функции с указателем на структуру DEBUG_EVENT. Эта структура содержит идентификаторы процесса и потока, которые отладчик может использовать для доступа к записи контекста потока. Структура также содержит EXCEPTION_DEBUG_INFO структуру, содержащую копию записи исключений.

При поиске обработчика исключений система дважды пытается уведомить отладчик процесса. Первая попытка уведомления предоставляет отладчику возможность обрабатывать точки останова или одношаговые исключения. Это известно как уведомление первого шанса . Затем пользователь может выдавать команды отладчика для управления средой процесса перед выполнением любых обработчиков исключений. Вторая попытка уведомить отладчика возникает только в том случае, если системе не удается найти обработчик исключений на основе кадра, обрабатывающий исключение. Это известно как уведомление последнего шанса . Если отладчик не обрабатывает исключение после последнего уведомления, система завершает отлаживаемый процесс.

При каждой попытке уведомления отладчик использует функцию ContinueDebugEvent для возврата управления в систему. Перед возвратом элемента управления отладчик может обрабатывать исключение и изменять состояние потока соответствующим образом или не обрабатывать исключение. Используя ContinueDebugEvent, отладчик может указать, что он обрабатывает исключение, в этом случае состояние компьютера восстанавливается, а выполнение потока продолжается в точке, в которой произошло исключение. Отладчик может также указать, что он не обрабатывал исключение, что приводит к тому, что система продолжит поиск обработчика исключений.