c++ - 我应该对 Minidumps 使用什么设置?

标签 c++ release minidump

目前我们用 MiniDumpNormal | 调用 MiniDumpWriteDump MiniDumpWithIndirectlyReferencedMemory 标志。这对于调试配置中的内部构建工作得很好,但没有提供我们在发布配置中需要的信息。

在 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

我建议您将 MiniDumpWithFullMemory 替换为 MiniDumpWithIndirectlyReferencedMemory

关于c++ - 我应该对 Minidumps 使用什么设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/284459/

相关文章:

minidump - 如何使用 WER 请求额外数据?

c++ - C++中的默认关闭操作(Windows窗体)

android - Google Maps 开发和发布之间的关键

android - ACTION_UP 问题

c++ - 发布构建时间在 VS2008 中花费很长时间

c++ - 在 Visual Studio 中调试 native c++ 转储文件时如何查看源代码

c++ - 使用 Visual C++ 从命令行编译

c++ - 用 1 和 0 填充一个大矩阵 - 六个嵌套循环

c++ - 在 C++ 中删除 STL 映射中分配的内存

c++ - 进程外使用MiniDumpWriteDump时如何获取异常信息?