如何从崩溃的混合模式exe / dll中获取完整的堆栈跟踪?

时间:2009-09-22 11:45:40

标签: visual-studio-2008 dll crash stack-trace mixed-mode

我用C ++ / CLR编写了一个应用程序。它使用本机lib / dll。在极少数情况下,它会破坏这个原生dll的内部人员。然后我得到一个堆栈跟踪,但只有托管部分,内部本机部分被省略。有没有办法让它显示整个堆栈跟踪?

我做了以下测试:我在原生dll中添加了一行代码,使其始终崩溃。当我通过双击exe来运行它时,我像以前一样获得了托管部分的堆栈跟踪。如果我从连接了调试器的VS2008运行它(只需按F5),它就会崩溃,我会看到整个堆栈跟踪,托管和非托管部分。

由于实际错误很少发生,我想在我的应用程序中添加一些东西,以某种方式显示整个堆栈跟踪,而无需用户安装和运行它通过VS.有没有办法做到这一点?

THX    马克

2 个答案:

答案 0 :(得分:0)

使用Sysinternals Process Explorer(http://technet.microsoft.com/de-de/sysinternals/bb896653.aspx),您可以查看当前正在运行的任何进程的堆栈。也许这会对你有帮助......

答案 1 :(得分:0)

这非常重要,我可以向您推荐以下链接:

Fast capture stack trace on windows / 64-bit / mixed mode

Resolve managed and native stack trace - which API to use?

但我尝试过 - 即使你使用这样的堆栈确定 - 如果你在本机端获得异常,它将作为SEHException传播到托管端,当你在托管端获得控制时 - 部分调用堆栈是已经输了。 (原生部分)。

可以在发生异常时确定本机调用堆栈,但这需要写入。

如果需要的话,我可以做自由职业者的工作。

相关问题