是否可以在创建后调整memory.dmp文件的大小?

时间:2015-07-01 08:44:09

标签: debugging windbg minidumpwritedump

我觉得有点懒,问这个,但我似乎无法召唤正确的谷歌查询来找到我所拥有的问题的答案。

一点背景知识。我有一个应用程序,它将监视未处理的异常和崩溃等其他进程。当触发时,此应用程序收集系统信息并使用MiniDumpWriteDump创建memory.dmp文件。

我们现在喜欢这个进程监控应用程序将崩溃数据上传到服务器,但显然memory.dmp文件可能很大,这对于上传来说是不可取的。因此,我们发现当我们创建memory.dmp时,我们可以减小memory.dmp的大小(如果我们不包含那么重要的信息,可能会使memory.dmp无用)或最终不得不上传大量文件。

无论如何,在我们创建了memory.dmp之后,它可以被打开,一些初始分析完成(我知道这个位是可能的)并且memory.dmp的任何位被认为是无用的,被删除/编辑out(并且上传了较小的memory.dmp副本)?

通过memory.dmp的“位”我的意思是,例如。删除处理数据或有关卸载模块的信息。见MINIDUMP_TYPE enumeration

1 个答案:

答案 0 :(得分:5)

首先查看Lieven Keersmaekers的建议。实际上,您希望保留转储中的尽可能多的数据以供以后分析,因此如果压缩转储就足够了,请先执行此操作。

更直接地回答这个问题......

如果压缩不够,有一个鲜为人知的技巧可以缩小转储文件,该文件仅在文档here中隐藏起来。

  

缩小现有转储文件

     

CDB和WinDbg也可用于收缩转储文件。去做这个,   开始调试现有的转储文件,然后使用.dump命令   创建一个较小的转储文件。

因此,如果您使用.dump /ma获取转储文件,则可以通过打开该转储文件并使用.dump /mhi来缩小它。选择minidump options为您提供最佳可用性与尺寸权衡的选择。 i选项是一个很好的选择,只能引入堆栈引用的堆内存。

警告:您的里程可能因此技术而异。使用32位转储,我已经有了这个技巧而且没有失败。 64位转储对我来说有点愚蠢,完全忽略了我传入的minidump选项。