Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在windows迷你转储中解析符号_C++_Windows_Windbg_Minidump - Fatal编程技术网

C++ 在windows迷你转储中解析符号

C++ 在windows迷你转储中解析符号,c++,windows,windbg,minidump,C++,Windows,Windbg,Minidump,我正在尝试使用MiniDumpWriteDump生成一个最小的Minidump,在这里我可以用pdb追溯附加符号。目前,它使用MiniDumpWithFullMemory工作,但会生成一个非常大的转储文件 使用MiniDumpNormal生成转储将生成一个小文件,并提供带有偏移量的堆栈跟踪,但我无法让Visual Studio或WinDbg加载符号。VisualStudio刚刚告诉我 二进制文件不是用调试信息生成的 WinDbg告诉我: 错误:找不到符号文件。默认为导出符号 对于app.exe

我正在尝试使用MiniDumpWriteDump生成一个最小的Minidump,在这里我可以用pdb追溯附加符号。目前,它使用MiniDumpWithFullMemory工作,但会生成一个非常大的转储文件

使用MiniDumpNormal生成转储将生成一个小文件,并提供带有偏移量的堆栈跟踪,但我无法让Visual Studio或WinDbg加载符号。VisualStudio刚刚告诉我

二进制文件不是用调试信息生成的

WinDbg告诉我:

错误:找不到符号文件。默认为导出符号 对于app.exe

我尝试了多种标志组合,但如果不使用MiniDumpWithFullMemory,则无法加载符号。生成可解析堆栈跟踪符号的最小可能转储的标志集是什么


可执行文件是使用调试信息(/Zi/debug)构建的,将调试器附加到正在运行的进程将加载符号,将调试器附加到崩溃的进程(在WER触发时)将加载符号,并使用MiniDumpWithFullMemory生成转储也将加载符号,但是其他转储类型不加载符号。

这个问题中最令人困惑的部分是,除了减少的小型转储之外,所有调试是如何正常工作的。检查可执行文件发现了问题:

symchk app.exe/v

dumpbin/headers app.exe | grep pdb

显示exe中没有pdb信息。在检查我的构建系统时,我发现了一个额外的构建步骤,该步骤使用以下方法嵌入清单:

MT.exe-manifest C:\app.exe.manifest-outputresource:C:\app.exe;一,

导致pdb信息被剥离


删除此生成步骤将保留调试信息,并允许从MiniDumpNormal转储加载符号。

此步骤的可能重复不是该问题的重复,它是使用调试信息构建的,在使用MiniDumpWithFullMemory转储时将加载符号。符号是以延迟方式加载的,也称为defferred加载。它与完全正常的mini或内核无关。分配的模块列表是流,因此您还有一些其他问题。请确保同时生成调试版本和发布版本使用调试信息。确保在priject的命令行中看到/zi确保生成pdb如果windbg说没有符号默认导出符号,则表示二进制文件是在没有符号的情况下生成的。minidump刚刚把它作为isDid转储了你还设置了你的可执行搜索路径吗?某些小型转储格式不包含可执行文件,您需要在分析转储时提供这些文件。@在WinDbg中设置图像文件路径的任何人都会给我***警告:无法验证app.exe的时间戳***错误:模块加载已完成,但无法为app.exe加载符号这是清单工具令人惊讶的副作用。出于好奇,当您尝试在调试器中打开转储时,是否尝试将exe、minidump和pdb都放在同一个目录中?使用chkmatch查看是否认为exe和pdb文件实际匹配也可能很有趣。@AdrianMcCarthy在使用exe时,将pdb/exe/dmp放在同一目录中不会加载符号。Chkmatch给出:
Executable:TimeDateStamp:58ed3297调试信息:2(代码视图)时间戳:58ed3297特征:0主版本:0最小服务器:0大小:92 RVA:01333e28文件偏移量:0133A28代码视图签名:0\=调试信息:12(未知)时间戳:58ed3297特征:0主版本:0最小服务器:0大小:20 RVA:01333e84文件偏移量:0133A84调试信息文件:格式:PDB 7.00结果:不匹配(原因:调试信息格式不兼容)