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

Is it possible to resize memory.dmp file after creation?

我觉得问这个有点懒,但我似乎无法提出正确的 google 查询来找到我所遇到问题的答案。

一些背景知识。我有一个应用程序可以监视其他进程是否存在未处理的异常和崩溃等。触发时,该应用程序会收集系统信息并使用 MiniDumpWriteDump 创建一个 memory.dmp 文件。

我们现在希望这个进程监控应用程序将崩溃数据上传到服务器,但显然 memory.dmp 文件可能很大,这不适合上传。所以我们发现我们可以在创建 memory.dmp 时减小它的大小(如果我们不包含重要信息,可能会使 memory.dmp 变得无用)或者最终不得不上传大量文件。

无论如何,在我们创建 memory.dmp 之后,是否可以打开它,完成一些初步分析(我知道这个位是可能的)并且 memory.dmp 的任何位被认为不是有用,removed/edited 出来(并上传 memory.dmp 的较小副本)?

例如,

memory.dmp 的 "bits"。删除有关已卸载模块的句柄数​​据或信息。参见 MINIDUMP_TYPE enumeration

先听从 的建议。确实,您想在转储中保留尽可能多的数据以供以后分析,因此如果压缩转储就足够了,请先执行此操作。

为了更直接地回答问题...

如果压缩不够,有一个鲜为人知的缩小转储文件的技巧,文档中只提到了这个技巧 here

Shrinking an Existing Dump File

CDB and WinDbg can also be used to shrink a dump file. To do this, begin debugging an existing dump file, and then use the .dump command to create a dump file of smaller size.

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

警告:您的里程数可能因该技术而异。使用 32 位转储,我成功地使用了这个技巧。 64 位转储对我来说有点愚蠢,完全忽略了我传入的小型转储选项。