Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 在保留一些堆信息的同时减少托管程序的小型转储的大小?_Debugging_C# 4.0_Managed_Minidump_Minidumpwritedump - Fatal编程技术网

Debugging 在保留一些堆信息的同时减少托管程序的小型转储的大小?

Debugging 在保留一些堆信息的同时减少托管程序的小型转储的大小?,debugging,c#-4.0,managed,minidump,minidumpwritedump,Debugging,C# 4.0,Managed,Minidump,Minidumpwritedump,通过.NET 4.0中的转储调试支持,我们可以自动(在询问用户之后:)创建C#程序崩溃的小转储,并将其上载到我们的问题跟踪系统(以便小转储可以帮助解决崩溃的原因) 使用WithFullMemory小型转储类型时,一切正常。我们可以看到堆栈和堆变量。不幸的是,即使对于小型C#程序(压缩)转储也相当大 如果我们使用“普通”小型转储类型,我们会得到一个非常小的转储,但托管调试器中甚至没有可用的堆栈变量信息。事实上,在托管调试器中,任何小于WithFullMemory的内容似乎都是无用的。我们尝试过使用

通过.NET 4.0中的转储调试支持,我们可以自动(在询问用户之后:)创建C#程序崩溃的小转储,并将其上载到我们的问题跟踪系统(以便小转储可以帮助解决崩溃的原因)

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

如果我们使用“普通”小型转储类型,我们会得到一个非常小的转储,但托管调试器中甚至没有可用的堆栈变量信息。事实上,在托管调试器中,任何小于WithFullMemory的内容似乎都是无用的。我们尝试过使用MINIDUMP_CALLBACK_例程将包含的模块信息限制在我们自己的模块中,但它似乎对托管转储几乎没有影响,但仍然设法破坏托管调试

有人知道如何修剪迷你转储文件,同时使其对托管调试有用吗?

可能会对您有所帮助

ClrDump是一组工具,允许生成 托管应用程序。在过去,必须使用完全转储 (尺寸非常大)如果您需要对 NET应用程序。ClrDump可以生成包含 足够的信息来恢复中所有线程的调用堆栈 应用程序


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

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

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

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

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


<我和WHOAL合作过的每个OEM和ISV都比自己的崩溃收集和报告系统节省了大量的精力和费用。

< P>我使用以下标志来节省空间,将为C++应用程序生成有用的MIDIDUMP:

MiniDumpWithPrivateReadWriteMemory | 
            MiniDumpWithDataSegs | 
            MiniDumpWithHandleData |
            MiniDumpWithFullMemoryInfo | 
            MiniDumpWithThreadInfo | 
            MiniDumpWithUnloadedModules

标志值在DbgHelp.h中指定,需要封送到C#中。通过指定回调例程进一步限制转储。

我给ClrDump的作者写了一封电子邮件,询问他的工具用于在“min”模式下创建转储的MINIDUMP\u类型参数。我在这里发布了他的答案:

尽管我非常支持WinQual:微软在隐私方面仍有很多用户的坏名声。我知道很多人永远不会,永远不会发送这些崩溃转储,而他们会很高兴地将它们直接发送给开发人员。有时候,情绪压倒了争论,滚动你自己的崩溃收集是一条路要走。但这取决于应用程序的目标受众。1)大多数人不太在意对微软的声誉有什么看法2)许多用户宁愿向微软发送崩溃转储,也不愿发送给他们不认识、不了解或不信任的公司/实体。3) 许多恶意软件通过弹出一条警告消息来拖网用户数据,用户点击该警告消息,然后授权UAC。他们知道的下一件事是,用户的机器将无法启动,因为他们现在已被安装的恶意软件感染。90%的情况下,最好支持操作系统内置的错误报告基础设施。感谢您的建议,但WinQual与我们无关。