В настоящее время я использовал SetUnhandledExceptionFilter() для обеспечения обратного вызова, чтобы получить информацию, когда произошло необработанное исключение, этот обратный вызов предоставит мне EXCEPTION_RECORD, который предоставляет ExceptionAddress
.C++ Win32 Обработчик необработанных исключений
[1] что на самом деле ExceptionAddress
есть? это адрес функции/кода, который дает исключение, или адрес памяти, к которому пыталась обратиться какая-либо функция?
[2] Есть ли какой-либо лучший механизм, который мог бы дать мне лучшую информацию при возникновении необработанного исключения? (Я не могу использовать режим отладки или добавлять какой-либо код, влияющий на производительность во время выполнения, поскольку крах случается редко и только при выпуске, когда код работает как можно быстрее)
[3] есть ли способ получить несколько адрес вызова, когда произошло необработанное исключение.
[4] предположим ExceptionAddress
имеет адрес А, и у меня есть DLL X загружается и выполняется по базовому адресу A-x
, а какой-то другой DLL Y в A+y
, это хорошо, чтобы предположить, что сбой был НАВЕРНОЕ вызвана кодом на DLL ИКС?
(1) OK (2) хорошо в моем случае, если я отлаживаю информацию о выпуске сборки, авария никогда не происходила. (3) спасибо, пожалуйста, приведите несколько примеров, как это использовать? (4) Я попробую это. спасибо – uray
Вот базовое учебное пособие, которое, как представляется, показывает, как его использовать, любезно предоставлено google: http://jpassing.com/2008/03/12/walking-the-stack-of-the-current-thread/ – shoosh