如何创建具有堆栈内存的小型转储

时间:2015-06-11 07:47:05

标签: c++ c debugging memory minidump

我的程序在崩溃时创建一个minidump(使用来自DBGHELP.DLL的MiniDumpWriteDump),我想尽可能地保持转储的大小,同时仍然有重要的内存信息可用。我已经完成了可以传递给MiniDumpWriteDump的标志和回调功能的不同组合(链接到debuginfo.comMSDN)。

我认为我受限于这些MINIDUMP_TYPE标志,因为它必须在旧的WinXP机器上工作:

  • MiniDumpNormal
  • MiniDumpWithDataSegs
  • MiniDumpWithFullMemory
  • MiniDumpWithHandleData
  • MiniDumpFilterMemory
  • MiniDumpScanMemory

我正在寻找一种方法来组合这些标志和回调函数来获得具有以下要求的转储:

  • 相对较小的尺寸(完全内存转储导致~200MB文件大小,我想要最多20MB)
  • 崩溃线程的堆栈跟踪,也可能是其他线程的堆栈跟踪,但没有内存信息
  • 崩溃线程的整个堆栈的内存信息。这是它变得复杂的地方:包括堆栈内存在大小方面应该没有问题,但堆内存可能是过度的。

问题是如何将内存信息限制为崩溃的线程以及如何包含整个调用堆栈的堆栈内存(局部变量)? 是否也可以包含堆内存的一部分,例如只有当前调用堆栈引用的这些部分?

0 个答案:

没有答案