ura*_*ray 3 c++ crash dll exception callback
目前我使用SetUnhandledExceptionFilter()来提供回调以在发生未处理的异常时获取信息,该回调将为我提供提供的EXCEPTION_RECORDExceptionAddress
.
[1]究竟是什么ExceptionAddress
?它是提供异常的函数/代码的地址,还是某些函数试图访问的内存地址?
[2]有没有更好的机制可以在未处理的异常发生时给我更好的信息?(我不能使用调试模式或添加任何影响运行时性能的代码,因为崩溃很少见,只有在代码运行得尽可能快的时才发布版本)
[3]有什么办法让我在未处理的异常发生时得到几个callstack地址.
[4]假设ExceptionAddress
具有地址A,我已经DLL X加载并在基地址执行A-x
,以及其它一些DLL的Y A+y
,是好假设碰撞被PROBABLY由DLL X代码引起的?
(1)ExceptionAddress
是导致异常的代码的地址.在访问冲突错误(0xC0000005
)的情况下,异常记录的附加参数之一保存尝试读取或写入的地址,另一个参数指示它是读取还是写入.这在您在问题中提供的链接中有记录.
(2)没有.此外,将调试信息添加到发布版本不会影响性能.您可以验证这一点并亲眼看看.
(3)dbghelp.dll
提供一个完整的库来调查崩溃.在athers中有StackWalk64
一个允许你获得完整的崩溃堆栈.
(4)GetModuleHandleEx
使用ExceptionAddress
as作为参数调用将获得有问题的代码所在的dll的句柄.至于其中的DLL问题引起的死机,这取决于你的"的定义造成的 ".在一个dll中发生的崩溃可能是完全不同且无关的dll中的错误的结果.
归档时间: |
|
查看次数: |
5890 次 |
最近记录: |