【发布时间】:2011-10-29 00:53:42
【问题描述】:
我正在从 .NET 调用 MiniDumpWriteDump 来生成一个小型转储,并且效果很好。但是,当我将生成的转储加载到 VS 2010 中时,我看不到任何有用的信息。特别是,调用堆栈窗口看起来像这样:
它不包含任何托管帧,尽管我在托管代码的异常处理程序中编写转储。此外,它不包含位于我的 exe 中的任何框架。
知道为什么会这样吗?
顺便说一句,当我从 VS 调试器手动创建转储时,转储确实包含预期的托管帧。
编辑:
我找到了一个关于这个的Microsoft Connect issue。它说:
目前 CLR 不支持托管进程获取自己的 转储。
有人知道这是否仍然是真的吗?
【问题讨论】:
-
使用托管代码调试小型转储在 VS2010 中仍然是一个值得商榷的乐趣。只是一些提示:您需要启用 Microsoft 符号服务器,以便调试器可以在 Windows .pdb 文件的帮助下正确遍历非托管堆栈。并且您需要将 MiniDumpWriteDump() 选项设置为 11,以便垃圾收集堆在 minidump 中被捕获。如果你创建的那个和 VS 创建的一样大,那你就做对了。
-
@stefan msdn.microsoft.com/en-us/magazine/cc188701.aspx - “在仔细研究了我能想到的一切之后,我意识到我要从其他堆栈获取信息的唯一方法是生成一个可以通过它的进程信息返回到 SUPERASSERT.NET。”和“虽然想法是从流程内部遍历所有堆栈,但没有可行的方法来实现这一点。”
标签: visual-studio-2010 debugging callstack minidump