【发布时间】:2015-07-21 15:49:54
【问题描述】:
我在 MSVS 2013 中有一个 C++ 项目,在调试时会出现问题:每当我运行调试会话时,都会出现一个消息框,上面写着“没有调试信息 - 'xy.exe' 的调试信息不能找到或不匹配。找不到 PDB 文件。要继续调试吗?这是一个常见问题,这个问题被问了好几次,但是,到目前为止我找到的答案都不适用于我的案例。
- 项目属性 -> 配置属性 -> C/C++ -> 优化 -> 优化被禁用
- 项目属性 -> 配置属性 -> 链接器 -> 调试 -> 生成调试信息已打开
- 路径和文件名正确; Project Properties -> Configuration Properties -> Linker -> Debugging -> Generate Program Database File is "$(OutDir)$(TargetName).pdb" (输出文件是"$(OutDir)$(TargetName)$(TargetExt)",所以这里也没有错误配置)
- 我尝试手动删除文件、重新启动 Visual Studio、清理和重建。从文件时间戳我看到它确实是刚刚创建的 PDB 文件,并且 exe 和 pdb 都构建到同一个文件夹并且命名正确。
- 有人建议仔细检查任务管理器,看看 devenv.exe 是否仍在后台运行——确实如此。我杀了它,删除了 PDB 文件,重新启动,清理,重建,没有运气。
- 按照海报的建议 [1],我将启动项目切换到不同的项目并返回。不走运。
- 当主项目的本地 PDB 文件与整个可执行文件 [2] 的最终 PDB 文件同名时,有人报告了此问题。这不是这里的情况。
- 当我打开模块窗口 [3] 时,我看到我的 exe 在“符号状态”列中显示“无法找到或打开 PDB”文件。当我尝试右键单击 -> 加载符号时,我看到它们就在那里(例如 xy.pdb for xy.exe)。当我选择它们时,一个消息框会显示“在此文件夹中找不到匹配符号文件。”
有趣的是,这个解决方案中的所有项目都不起作用。但是,其他项目可以正常工作。我尝试将项目属性中的每个设置与有效的设置进行比较,但我找不到任何差异。
还有什么想法吗?
[1]https://stackoverflow.com/a/15378106/4508058
【问题讨论】:
-
当您在调试器中启动您的应用程序时(忽略您暂时没有调试信息),您的
Output Window中会显示哪些消息?其中一行应该说“正在加载whatever.exe”,以及是否可以找到调试信息的状态。记下正在加载的完整路径,并确保它是正在运行的正确可执行文件。 -
您的可执行文件是否提升或以其他用户身份运行?听起来调试器/可执行文件真的无法打开 pdb 文件,这对我来说听起来像是文件/目录权限问题。
-
@PaulMcKenzie:谢谢。它写“无法找到或打开 PDB 文件”。二进制路径是正确的。
-
@MarkB:谢谢,没想到。但是,它使用与 devenv.exe 相同的用户运行,即我的管理员用户。 PDB文件的文件权限没问题。
-
注意:有时,当我尝试构建调试二进制文件时,我得到了这个,也许这是对什么问题的提示?错误 24 错误 LNK1209:程序数据库 'D:\work\-coding-\Projects\vrtheater\LoadingApp\bin\LoadingAppD.pdb' 与上一个链接不同;重新链接或重建 D:\work\-coding-\Projects\vrtheater\LoadingApp\prj\LINK LoadingApp
标签: c++ visual-studio debugging