此模块的调试信息中缺少源信息 - PDB 已成功加载

Posted

技术标签:

【中文标题】此模块的调试信息中缺少源信息 - PDB 已成功加载【英文标题】:Source information missing from the debug information for this module - PDB successfully loaded 【发布时间】:2017-02-05 07:02:52 【问题描述】:

Visual Studio 加载了正确的 PDB 文件,但在解决方案中找不到任何内容的源信息。

我尝试过的事情:

清理、重启、重新生成项目 (CMake)、重建 检查“模块”窗口以确保已加载 PDB(已加载) 解决方案属性下的“调试源文件”设置混乱 用 symchk 检查 PDB 文件(它说 PDB 与 EXE 匹配,并且它具有完整的符号信息,即它没有被剥离) 从 Microsoft 下载系统库符号,因为为什么不这样做

是否有一些设置会生成没有源信息的 PDB?或者它可能会将坏路径烘焙到 PDB 中?我尝试通过 PDB 进行 grepping,虽然它似乎包含所有符号,但我找不到任何源文件路径。

更多信息:这是一个 64 位 C++ 项目。一切都是静态链接的,包括运行时。

【问题讨论】:

如果无法自行找到源文件,调试器会询问您的位置。下意识是点击取消,就不会再问了。在解决方案资源管理器窗口中右键单击解决方案 > 属性 > 调试源文件。清空“请勿查看”框,在其上方的列表中添加路径。 @HansPassant 这很奇怪,我从来没有得到手动定位源文件的选项。这里:i.imgur.com/jgOL8wE.png 将源文件夹添加到“调试源文件”属性似乎没有效果。 @etodd,你能在本地机器上获取源文件吗?可能确实没有源文件供参考或其他:msdn.microsoft.com/en-us/library/3sehk0fb.aspx,请取消勾选工具 -> 选项 -> 调试 -> 常规下的“要求源文件与原始版本完全匹配”选项。再次调试。 @JackZhai 是的,也试过那个复选框。没有效果。所有源文件都在本地计算机上的解决方案中。有一个库我既没有源代码也没有 PDB,但以前从未引起过问题。 【参考方案1】:

项目缺少/Zi parameter。显然,这仍然会导致编译器生成一个可以成功加载的 PDB 文件,只是其中没有任何有用的符号。不知道为什么。

【讨论】:

【参考方案2】:

更多具体案例的答案,设置了 /ZI 选项: 这里所讨论的变量是一个 HGDIOBJ 变量,它是作为 SelectObject 的返回而创建的。它在监视窗口中的类型是 void *。 操作是“在值更改时中断”,继续后 VS 窗口代码图形弹回到主 WndPRoc 的开头:

当0xbd1676ecb8(原始表达式:hMyObj)发生变化时(8 字节)在进程'MyProg.exe'

之后显示“源不可用”对话框。

那么,该怎么办?如果这台机器上的 VS2019 安装存在问题,它们仅适用于这种特定的变量类型,因此决定不对该类型使用“值更改时中断”。

【讨论】:

【参考方案3】:

在visual studio的底栏,点击Application Output,从产生的异常中解决错误。

【讨论】:

以上是关于此模块的调试信息中缺少源信息 - PDB 已成功加载的主要内容,如果未能解决你的问题,请参考以下文章

强制 WinDbg 加载已卸载模块的符号

调试信息是不是显示 C++/MSVC 中的代码?

使用pdb模块调试Python

visual studio 怎么使用pdb进行调试

vs调试时底部输出调试信息“无法查找或打开 PDB 文件”解决办法

如何检查 pdb 文件是不是对调试程序集有效