目前我们用MiniDumpNormal |调用MiniDumpWriteDump MiniDumpWithIndirectlyReferencedMemory标志.这适用于Debug配置中的内部构建,但是没有提供我们在Release配置中所需的尽可能多的信息.
在Release中,minidump数据包含足够的堆栈信息,以便调试器计算出代码中发生故障的位置,但没有其他数据.我不仅仅意味着由于优化而缺少局部变量,正如您在Release版本中所期望的那样 – 我的意思是除了调用堆栈和当前代码行之外没有任何其他用处.没有寄存器,没有本地,没有全局,没有当地人指向的对象 – 什么都没有.我们甚至没有得到’this’,这将允许我们查看当前对象.这是使用MiniDumpWithIndirectlyReferencedMemory的要点 – 它应该包含本地和堆栈变量引用的内存,但似乎不是.
我们应该使用什么标志呢?我们不想使用MiniDumpWithFullMemory并开始生成600MB转储,但如果它意味着获得更多有用的数据,我们很乐意将转储扩展到我们目前获得的90KB之外.也许我们应该使用MiniDumpWithDataSegments(全局)或……?
解决方法
WinDbg对.dump / ma使用以下标志:
0:003> .dumpdebug ----- User Mini Dump Analysis MINIDUMP_HEADER: Version A793 (62F0) NumberOfStreams 13 Flags 41826 0002 MiniDumpWithFullMemory 0004 MiniDumpWithHandleData 0020 MiniDumpWithUnloadedModules 0800 MiniDumpWithFullMemoryInfo 1000 MiniDumpWithThreadInfo 40000 MiniDumpWithTokenInformation
我建议你用MiniDumpWithIndirectlyReferencedMemory替换MiniDumpWithFullMemory.