gpt4 book ai didi

c++ - SEHException while in paint() - .NET 处理正在破坏调用堆栈

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:31 33 4
gpt4 key购买 nike

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

现在,我遇到了一些情况,在 native 代码和托管代码之间的转换中,这种方法效果不佳。

例如,如果在 Paint() 事件中我调用了一些本地代码,而该本地代码抛出异常。
消息循环调度程序将捕获 native 异常,然后重新抛出 .NET SEHException
托管 COM 对象的 DLLS 有时也会发生同样的事情。

问题在于,由于堆栈回滚以及它从 native 异常捕获和创建 SEHException 的方式,实际的 native 调用堆栈被破坏了。

我能否使用 SEHException 以某种方式获取 native 调用堆栈? (注意SEHException中的调用栈是CLR调用栈)。

或者我可以设置应用程序,使其以某种方式保存调用堆栈吗?

最佳答案

尝试 !dumpheap -type SEHException 。使用 SEHException 的地址打印 !pe address of exception 。您将获得调用堆栈

关于c++ - SEHException while in paint() - .NET 处理正在破坏调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10414503/

33 4 0
文章推荐: c# - 如何在 Web 应用程序中使用 native 库方法?
文章推荐: c++ - STL list 迭代器更改列表中的对象