17

借助 .NET 4.0 中的转储调试支持,我们正在自动研究(当然是在询问用户之后:)创建 C# 程序崩溃的小型转储,以将它们上传到我们的问题跟踪系统(以便小型转储可以帮助解决问题的原因)碰撞)。

使用 WithFullMemory 小型转储类型时一切正常。我们可以看到堆栈和堆变量。不幸的是,即使对于小型 C# 程序,(压缩的)转储也非常大。

如果我们使用“Normal”小型转储类型,我们会得到一个非常小的转储,但托管调试器中甚至没有堆栈变量信息。事实上,任何低于 WithFullMemory 的东西在托管调试器中似乎都毫无用处。我们曾尝试使用 MINIDUMP_CALLBACK_ROUTINE 将包含的模块信息限制在我们自己的模块中,但似乎它对托管转储几乎没有影响,但仍然设法破坏托管调试?

有没有人有关于如何修剪小型转储同时保持它对托管调试有用的任何提示?

4

5 回答 5

3

我使用以下标志来节省空间将为 C++ 应用程序生成有用的小型转储:

MiniDumpWithPrivateReadWriteMemory | 
            MiniDumpWithDataSegs | 
            MiniDumpWithHandleData |
            MiniDumpWithFullMemoryInfo | 
            MiniDumpWithThreadInfo | 
            MiniDumpWithUnloadedModules

标志值在 DbgHelp.h 中指定,需要编组到 C# 中。通过指定 CallbackRoutine 进一步限制转储。

于 2011-03-28T18:46:27.907 回答
1

恕我直言,我强烈建议您注册一个 Microsoft WinQual 帐户,向 Microsoft 注册您的应用程序。

http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx

这将使您不仅可以利用 Microsoft 广泛的崩溃收集和分析服务(免费!),还可以让您通过 Windows 的内置错误报告工具为您的应用程序发布修复和补丁。

此外,通过参与 WinQual 计划,部署您的应用程序和使用内部 Windows 错误报告系统的企业也将能够为您的应用程序收集、报告和接收补丁程序。

另一个好处是,使用 WinQual,您离获得应用程序徽标认证更近了一步!

与滚动他们自己的崩溃收集和报告系统相比,与我合作过的每个使用 WinQual 的 OEM 和 ISV 都节省了大量的精力和费用。

于 2011-02-15T07:42:06.107 回答
1

仅供参考,如上所述,ClrDump 看起来很酷,但它似乎只适用于 1.1。和 2.0 运行时。

于 2011-02-02T15:55:15.260 回答
0

ClrDump可能会帮助你。

ClrDump 是一组允许生成托管应用程序的小型小型转储的工具。过去,如果您需要对 .NET 应用程序执行事后分析,则必须使用完整转储(大小非常大)。ClrDump 可以生成包含足够信息的小型小型转储,以恢复应用程序中所有线程的调用堆栈。

于 2010-10-18T13:40:21.550 回答
0

我给 ClrDump 的作者写了一封电子邮件,询问了一个问题,他的工具用于在“最小”模式下创建转储的 MINIDUMP_TYPE 参数是什么。我在这里发布了他的答案:What is minimum MINIDUMP_TYPE set to dump native C++ process that hosts .net component to be able to use !clrstack in windbg

于 2011-11-25T13:07:00.200 回答