3

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

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

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

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

例如,我的意思是 memory.dmp 的“位”。删除有关已卸载模块的句柄数​​据或信息。请参见MINIDUMP_TYPE 枚举

4

1 回答 1

5

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

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

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

缩小现有转储文件

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

因此,如果您有一个使用 . 的转储文件.dump /ma,那么您可以通过打开该转储文件并使用.dump /mhi. 选择哪个minidump 选项可以为您提供最佳可用性与大小的权衡。该i选项是仅引入堆栈引用的堆内存的好选择。

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

于 2015-07-01T10:56:25.673 回答