在保留一些堆信息的同时减少托管程序的小型数据库的大小?

时间:2010-07-27 13:51:09

标签: debugging c#-4.0 managed minidump minidumpwritedump

使用.NET 4.0中的转储调试支持,我们会自动查询(当然询问用户:)创建C#程序崩溃的小型转储以将它们上传到我们的问题跟踪系统(以便minidump可以帮助解决崩溃的原因)。

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

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

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

5 个答案:

答案 0 :(得分:3)

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

MiniDumpWithPrivateReadWriteMemory | 
            MiniDumpWithDataSegs | 
            MiniDumpWithHandleData |
            MiniDumpWithFullMemoryInfo | 
            MiniDumpWithThreadInfo | 
            MiniDumpWithUnloadedModules

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

答案 1 :(得分:1)

如上所述,正如上面提到的那样,ClrDump看起来非常酷,但看起来它只适用于1.1。和2.0运行时。

答案 2 :(得分:1)

在充分尊重的情况下,我强烈建议您注册Microsoft WinQual帐户,向Microsoft注册您的应用程序。

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

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

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

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

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

答案 3 :(得分:0)

ClrDump可能会帮助你。

  

ClrDump是一组工具,可以生成小型的小型泵   托管应用程序在过去,有必要使用完全转储   (如果你需要进行事后分析)   一个.NET应用程序。 ClrDump可以生产包含的小型小型泵   足够的信息来恢复的所有线程的调用堆栈   应用

答案 4 :(得分:0)

我给ClrDump的作者写了一封电子邮件,询问他的工具用于在'min'模式下创建转储的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