我用C ++ / CLR编写了一个应用程序。它使用本机lib / dll。在极少数情况下,它会破坏这个原生dll的内部人员。然后我得到一个堆栈跟踪,但只有托管部分,内部本机部分被省略。有没有办法让它显示整个堆栈跟踪?
我做了以下测试:我在原生dll中添加了一行代码,使其始终崩溃。当我通过双击exe来运行它时,我像以前一样获得了托管部分的堆栈跟踪。如果我从连接了调试器的VS2008运行它(只需按F5),它就会崩溃,我会看到整个堆栈跟踪,托管和非托管部分。
由于实际错误很少发生,我想在我的应用程序中添加一些东西,以某种方式显示整个堆栈跟踪,而无需用户安装和运行它通过VS.有没有办法做到这一点?
THX 马克
答案 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传播到托管端,当你在托管端获得控制时 - 部分调用堆栈是已经输了。 (原生部分)。
可以在发生异常时确定本机调用堆栈,但这需要写入。如果需要的话,我可以做自由职业者的工作。