Как следить за исключениями UNHANDLED только с помощью функций семейства WaitForDebugEvent? - PullRequest
1 голос
/ 25 декабря 2010

Я пытаюсь перехватить необработанные исключения в приложении и перезапустить их с помощью функции WaitForDebugEvent. Но я не могу сказать, когда исключение обрабатывается приложением (например, try..catch), а когда нет. Как я могу это сделать? Похоже, в структуре DEBUG_EVENT таких данных нет.

Ответы [ 2 ]

2 голосов
/ 25 декабря 2010

Если вы не перехватываете определенные исключения с помощью WaitForDebugEvent, вы можете попробовать ввести UnhandledExceptionFilter.кроме этого, проверьте, что ваша обработка соответствует Microsoft's Пример

1 голос
/ 25 декабря 2010

В структуре EXCEPTION_DEBUG_INFO, которая находится в структуре DEBUG_EVENT, есть поле dwFirstChance:

Если элемент dwFirstChance не равен нулю, это первый раз, когда встречается отладчикисключение.Отладчики обычно обрабатывают точки останова и одношаговые исключения, когда они встречаются впервые.Если этот элемент равен нулю, отладчик ранее столкнулся с исключением.Это происходит только в том случае, если во время поиска структурированных обработчиков исключений ни один обработчик не был найден, либо исключение было продолжено.

Так что вам нужно будет искать моменты времени, когда dwFirstChance равен 0.

Но если вы просто хотите перезапустить свое приложение в случае сбоя, может быть проще создать другое приложение для отслеживания сбоя первого, чем использовать API отладки Windows.

...