使用.NET 4.0中的转储调试支持,我们会自动查询(当然询问用户:)创建C#程序崩溃的小型转储以将它们上传到我们的问题跟踪系统(以便minidump可以帮助解决崩溃的原因)。
使用WithFullMemory minidump类型时,一切正常。我们可以看到堆栈和堆变量。不幸的是,即使对于小型C#程序,(zipped)转储也非常大。
如果我们使用“Normal”minidump类型,我们会得到一个非常小的转储,但托管调试器中甚至没有堆栈变量信息。实际上,任何比WithFullMemory更少的东西在托管调试器中似乎都没用。我们已经尝试过使用MINIDUMP_CALLBACK_ROUTINE将包含的模块信息限制到我们自己的模块,但它似乎对托管转储几乎没有影响,但仍设法破坏托管调试?
有没有人有关于如何修剪minidump同时保持对托管调试有用的任何提示?
答案 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