1

我用 C++/CLR 编写了一个应用程序。它使用本机 lib/dll。在极少数情况下,它会在本机 dll 内部崩溃。然后我得到一个堆栈跟踪,但仅限于托管部分,内部本机部分被排除在外。有没有办法让它显示整个堆栈跟踪?

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

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

谢谢马克

4

2 回答 2

0

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

于 2009-09-22T15:22:43.320 回答
0

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

在 Windows/64 位/混合模式下快速捕获堆栈跟踪

解决托管和本机堆栈跟踪 - 使用哪个 API?

但是我已经尝试过-即使您使用这样的堆栈确定-如果您在本机端遇到异常,它将作为 SEHException 传播到托管端,并且当您在托管端获得控制权时-部分调用堆栈已经丢失。(原生部分)。可以通过异常发生时确定本机调用堆栈,但这仍然需要编写。

如果需要,我可以作为自由职业者完成这项工作。

于 2016-02-21T09:31:04.323 回答