不久前,我们了解到,即使是发布版本也可能运行不正确--可能会坠落--可能会挂起等等。因此,我们决定实施转储创建过程。所有的步骤都可以在互联网上很快找到。但有一件事--主要的事情--对我们来说仍然是不可理解的。
根据MSDN,MINIDUMP_TYPE支持23个标志。但对于下一个问题,没有深入的技术解释:它们在各自的应用领域都是独立的吗?或者它们可以成对、三元组使用?它们都可以同时使用吗?我是否可以在某些组中使用它们(例如一些3个标志-实际上生成与其他5个标志相同的转储。)我的意思是我什么时候会用来做ex。1+3标志-它将绝对等同于使用标志4+6+9。或者标志1或标志3或... -是所有其他标志的叠加吗?不然呢?我要了解所有可用旗帜之间的所有可能的交叉。因为在ex中使用标志3+12+14可能没有实际意义,所以我现在的目标是在内存中创建包含所有可用数据的转储。我应该能够查看所有线程,所有local-static-global-in_heap变量。我的意思是,当我打开一些用bla+bla+bla标志组合生成的转储时-它应该与我可以将调试器直接附加到进程中的情况完全相同。我应该得到所有可能的数据!
P.S. MiniDumpWithFullMemory -没有给我这样的能力(为什么?单词“FULL”memory --不是“FULL”的意思吗?这只是什么的一部分?
发布于 2013-08-18 05:03:06
一个小型转储包含一堆代表进程的片段。进程使用的内存只是其中的一部分。关于线程、句柄等的元数据都是额外的部分。
所有这些数据都存储在.dmp文件中的单独“流”中(可以在here中看到该文件的列表)。
选择要包括的这些流中的哪些流通过少量标志表示为MiniDumpWriteDump。然后使用一大块标志来定制在内存流中包含多少内存,这只是为了让开发人员可以最小化结果文件的大小。对于我们生成的所有崩溃转储,我们通常使用以下MINIDUMP_TYPE标志:
MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithModuleHeaders |
MiniDumpWithUnloadedModules | MiniDumpWithProcessThreadData |
MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfoWinDbg有一个未记录的命令,可以用来转储崩溃转储文件的内部内容:
.dumpdebug您可以在查看崩溃转储文件时使用它来查看包含哪些流,查看所有模块、内存节等。
发布于 2014-08-05 16:58:26
在VS2010中,它不能识别MINIDUMP_TYPE标志MiniDumpWithModuleHeaders。以下标志适用于我:
MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithUnloadedModules |
MiniDumpWithUnloadedModules | MiniDumpWithProcessThreadData |
MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo |
MiniDumpWithFullAuxiliaryState | MiniDumpIgnoreInaccessibleMemory |
MiniDumpWithTokenInformation发布于 2020-07-28 04:39:03
对于未来的参考,由于信息仍然很稀少:已经提出了类似的问题,请参阅What combination of MINIDUMP_TYPE enumeration values will give me the most 'complete' mini dump?。答案中提到了优秀的调试资源DebugInfo.com,尽管(有点)过时,但特别指向文章http://www.debuginfo.com/articles/effminidumps.html#minidumptypes。注意,新的-ish标志(从Windows 7开始可用,以及可能的更早版本,如Windows Vista)确实没有被解释。似乎没有全面的MINIDUMP_TYPE标志版本历史,API文档给出的最小版本似乎并不总是正确的,因为我过去在使用诸如MiniDumpWithFullMemoryInfo之类的标志时遇到过问题,据称从Windows7上的Windows6.1开始就可以使用,直到我将DbgHelp.dll版本6.8升级到(最新的Windows7) DbgHelp.dll版本6.12。
Windows7确实引入了Windows错误报告,并且在查看WerReportAddDump one的文档时会遇到(以及其他问题) WerDumpTypeHeapDump,它(从2020-07-27开始)似乎相当于
MiniDumpWithDataSegs
| MiniDumpWithProcessThreadData
| MiniDumpWithHandleData
| MiniDumpWithPrivateReadWriteMemory
| MiniDumpWithUnloadedModules
| MiniDumpWithFullMemoryInfo
| MiniDumpWithThreadInfo
| MiniDumpWithTokenInformation
| MiniDumpWithPrivateWriteCopyMemory最后三个标志显然只在Windows7之后才可用(并且需要足够新的DbgHelp.dll)。这似乎是WER可以记录的最全面的转储(忽略自定义转储类型),并且就应该记录的用于事后调试的最少信息而言,这可能是一个很好的起点,就像调试器事先附加到进程一样。
https://stackoverflow.com/questions/18018212
复制相似问题