c++ - 在 Paint() 中时出现 SEHException - .NET 处理正在破坏调用堆栈

标签 c++ exception stack-trace callstack crash-dumps

我有错误处理代码,旨在捕获未处理的异常,然后创建转储。

现在,我遇到了一些在 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/

相关文章:

c++ - C++ 中的 if 语句行为真的很奇怪

python - Raise_child异常输出

python - 从堆栈跟踪到树

c# - 使用 StackTrace 推断方法的调用者

oracle - 在PLSQL中如何获取发生异常的过程/函数名称?

c++ - 无法声明静态 constexpr char []

C++ CMenu 绘图不正确(非自定义)

c++ - 使用冒泡排序对类中的 2D Char 和 Int 数组进行排序?

java - 我应该如何解决这种错误