в настоящее время я использовал SetUnhandledExceptionFilter () , чтобы обеспечить обратный вызов для получения информации, когда произошло необработанное исключение, этот обратный вызов предоставит мне EXCEPTION_RECORD , который обеспечивает ExceptionAddress
.
[1] что на самом деле есть ExceptionAddress
? это адрес функции / кода, который дает исключение, или адрес памяти, к которому пыталась получить доступ какая-то функция?
[2] есть ли лучший механизм, который мог бы дать мне лучшую информацию, когда произошло необработанное исключение? (Я не могу использовать режим отладки или добавлять какой-либо код, который влияет на производительность во время выполнения, поскольку сбой происходит редко и только при сборке релиза, когда код выполняется максимально быстро)
[3] могу ли я получить несколько адресов стека вызовов при возникновении необработанного исключения.
[4] предположим, что ExceptionAddress
имеет адрес A, и у меня есть DLL X, загруженная и выполняемая по базовому адресу A-x
, и некоторая другая DLL Y в A+y
, хорошо ли предположить, что сбой был ВЕРОЯТНО вызвано кодом на DLL X?