我有错误处理代码,旨在捕获未处理的异常,然后创建转储。
现在,我遇到了一些在 native 代码和托管代码之间转换时效果不佳的情况。
例如,如果在 Paint()
事件中我调用一些 native 代码,并且该 native 代码会引发异常。
消息循环调度程序将捕获 native 异常,然后重新抛出 .NET SEHException
。
有时,托管 COM 对象的 DLL 也会发生同样的情况。
这样做的问题是,由于堆栈回滚以及它从 native 异常捕获和创建 SEHException
的方式,实际的 native 调用堆栈被破坏。
我可以使用SEHException
以某种方式获取 native 调用堆栈吗? (注意SEHException中的调用堆栈是CLR调用堆栈)。
或者我可以设置应用程序,以便它能以某种方式保存调用堆栈吗?
最佳答案
尝试 !dumpheap -type SEHException 。使用 SEHException 的地址打印 !pe 异常地址 。您将获得调用堆栈
关于c++ - 在 Paint() 中时出现 SEHException - .NET 处理正在破坏调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10414503/