types - MiniDumpWriteDump 及其 MINIDUMP_TYPE 类型

标签 types dump flags minidump minidumpwritedump

不久前,我们了解到即使发布版本也可能无法正常运行 - 可能会下降 - 可能会挂起等等。所以我们决定实现转储创建过程。在 Internet 上很快找到了所有步骤。但是一个——主要的事情——对我们来说仍然是无法理解的。

根据 MSDN,MINIDUMP_TYPE 支持 23 个标志。但是对于下一个问题没有深入的技术解释:它们在各自的应用领域中都是独立的吗?或者它们可以成对使用,三联使用?它们都可以同时使用吗?我可以在某些组中使用它们吗(例如,一些 3 个标志 - 与其他 5 个标志几乎生成相同的转储。)
我的意思是当我将使用前。 1+3 标志 - 绝对等同于使用标志 4+6+9。或标志 1 或标志 3 或 ... - 是所有其他标志的叠加吗?
要不然是啥?我想了解所有可用标志之间所有可能的交叉。因为可能使用标志 3+12+14 没有实际意义
例如,我目前的目标是使用内存中的所有可用数据创建转储。我应该能够查看所有线程,所有 local-static-global-in_heap 变量。
我的意思是,当我打开一些使用 bla+bla+bla 标志组合生成的转储时 - 它应该与我可以将调试器直接附加到进程的情况完全相同。我应该获得所有可能的数据!

附言MiniDumpWithFullMemory - 没有给我这样的能力(((为什么?这个词@FULL@ memory - 并不意味着FULL?它只是什么的一部分?

最佳答案

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

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

通过 MiniDumpWriteDump 的一些标志来选择要包含的这些流中的哪一个。 .然后使用一大块标志来自定义要在内存流中包含多少内存,这只是为了让开发人员可以最小化生成文件的大小。对于我们生成的所有故障转储,我们通常使用这些 MINIDUMP_TYPE标志:

MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithModuleHeaders | 
MiniDumpWithUnloadedModules | MiniDumpWithProcessThreadData | 
MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo

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

您可以在查看故障转储文件时使用它来查看包含哪些流、查看所有模块、内存部分等。

关于types - MiniDumpWriteDump 及其 MINIDUMP_TYPE 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018212/

相关文章:

types - 当他们谈论 "uniqued types"和 "types in LLVM are uniqued"时,他们在谈论什么?

java - int 到 Java 中的 unsigned char 数组

types - 当使用剩余字段定义记录时,类型缩小不起作用

android - Parcelable 中的标志有什么用?

java - Android:如何获取已安装应用程序的列表并将它们显示给用户

haskell - 是否可以从 Haskell 中数据类型的可能值生成列表?

debugging - MiniDumpWriteDump() 函数的参数 : Why do we need a handle and an ID?

mysql - 导入 MySQL 数据库时遇到问题

核心转储错误 c

java - java Android 检查标志位的所有值