首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MiniDumpWriteDump及其MINIDUMP_TYPE类型

MiniDumpWriteDump及其MINIDUMP_TYPE类型
EN

Stack Overflow用户
提问于 2013-08-02 21:33:16
回答 3查看 2K关注 0票数 3

不久前,我们了解到,即使是发布版本也可能运行不正确--可能会坠落--可能会挂起等等。因此,我们决定实施转储创建过程。所有的步骤都可以在互联网上很快找到。但有一件事--主要的事情--对我们来说仍然是不可理解的。

根据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”的意思吗?这只是什么的一部分?

EN

回答 3

Stack Overflow用户

发布于 2013-08-18 05:03:06

一个小型转储包含一堆代表进程的片段。进程使用的内存只是其中的一部分。关于线程、句柄等的元数据都是额外的部分。

所有这些数据都存储在.dmp文件中的单独“流”中(可以在here中看到该文件的列表)。

选择要包括的这些流中的哪些流通过少量标志表示为MiniDumpWriteDump。然后使用一大块标志来定制在内存流中包含多少内存,这只是为了让开发人员可以最小化结果文件的大小。对于我们生成的所有崩溃转储,我们通常使用以下MINIDUMP_TYPE标志:

代码语言:javascript
复制
MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithModuleHeaders | 
MiniDumpWithUnloadedModules | MiniDumpWithProcessThreadData | 
MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo

WinDbg有一个未记录的命令,可以用来转储崩溃转储文件的内部内容:

代码语言:javascript
复制
.dumpdebug

您可以在查看崩溃转储文件时使用它来查看包含哪些流,查看所有模块、内存节等。

票数 4
EN

Stack Overflow用户

发布于 2014-08-05 16:58:26

在VS2010中,它不能识别MINIDUMP_TYPE标志MiniDumpWithModuleHeaders。以下标志适用于我:

代码语言:javascript
复制
MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithUnloadedModules |
MiniDumpWithUnloadedModules | MiniDumpWithProcessThreadData | 
MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo | 
MiniDumpWithFullAuxiliaryState | MiniDumpIgnoreInaccessibleMemory |
MiniDumpWithTokenInformation
票数 1
EN

Stack Overflow用户

发布于 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开始)似乎相当于

代码语言:javascript
复制
MiniDumpWithDataSegs
 | MiniDumpWithProcessThreadData
 | MiniDumpWithHandleData
 | MiniDumpWithPrivateReadWriteMemory
 | MiniDumpWithUnloadedModules
 | MiniDumpWithFullMemoryInfo
 | MiniDumpWithThreadInfo
 | MiniDumpWithTokenInformation
 | MiniDumpWithPrivateWriteCopyMemory

最后三个标志显然只在Windows7之后才可用(并且需要足够新的DbgHelp.dll)。这似乎是WER可以记录的最全面的转储(忽略自定义转储类型),并且就应该记录的用于事后调试的最少信息而言,这可能是一个很好的起点,就像调试器事先附加到进程一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18018212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档