【问题标题】:"No Debugging Information", yet, it is right there“没有调试信息”,然而,它就在那里
【发布时间】:2015-07-21 15:49:54
【问题描述】:

我在 MSVS 2013 中有一个 C++ 项目,在调试时会出现问题:每当我运行调试会话时,都会出现一个消息框,上面写着“没有调试信息 - 'xy.exe' 的调试信息不​​能找到或不匹配。找不到 PDB 文件。要继续调试吗?这是一个常见问题,这个问题被问了好几次,但是,到目前为止我找到的答案都不适用于我的案例。

  1. 项目属性 -> 配置属性 -> C/C++ -> 优化 -> 优化被禁用
  2. 项目属性 -> 配置属性 -> 链接器 -> 调试 -> 生成调试信息已打开
  3. 路径和文件名正确; Project Properties -> Configuration Properties -> Linker -> Debugging -> Generate Program Database File is "$(OutDir)$(TargetName).pdb" (输出文件是"$(OutDir)$(TargetName)$(TargetExt)",所以这里也没有错误配置)
  4. 我尝试手动删除文件、重新启动 Visual Studio、清理和重建。从文件时间戳我看到它确实是刚刚创建的 PDB 文件,并且 exe 和 pdb 都构建到同一个文件夹并且命名正确。
  5. 有人建议仔细检查任务管理器,看看 devenv.exe 是否仍在后台运行——确实如此。我杀了它,删除了 PDB 文件,重新启动,清理,重建,没有运气。
  6. 按照海报的建议 [1],我将启动项目切换到不同的项目并返回。不走运。
  7. 当主项目的本地 PDB 文件与整个可执行文件 [2] 的最终 PDB 文件同名时,有人报告了此问题。这不是这里的情况。
  8. 当我打开模块窗口 [3] 时,我看到我的 exe 在“符号状态”列中显示“无法找到或打开 PDB”文件。当我尝试右键单击 -> 加载符号时,我看到它们就在那里(例如 xy.pdb for xy.exe)。当我选择它们时,一个消息框会显示“在此文件夹中找不到匹配符号文件。”

有趣的是,这个解决方案中的所有项目都不起作用。但是,其他项目可以正常工作。我尝试将项目属性中的每个设置与有效的设置进行比较,但我找不到任何差异。

还有什么想法吗?

[1]https://stackoverflow.com/a/15378106/4508058

[2]https://stackoverflow.com/a/21640745/4508058

[3]https://stackoverflow.com/a/540599/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


【解决方案1】:

好的,给未来读者的提示:现在它终于可以工作了。我注意到该项目与另一个项目共享它的中间目录。然而,仅仅改变这个,清理,重建,甚至手动删除中间目录都没有帮助。但是在一些构建之后它终于起作用了,所以它可能与它有关(?)。所以我对这个问题没有绝对的解决方案,但也许它会有所帮助。

虽然(LNK1209: program database 'D:\work-coding-\Projects\vrtheater\LoadingApp\bin\LoadingAppD.pdb')我有时仍然会收到我在上面的评论中提到的链接器错误,所以仍然可能存在出事了……

【讨论】:

    【解决方案2】:

    c++编译还需要生成调试信息/Zi。如果也设置了,请使用带有 !sym 噪声的 windbg 来查看它尝试加载符号的位置。

    【讨论】:

    • 谢谢,不知道WinDgb。符号搜索路径正确。输出为:*** 错误:找不到符号文件。默认为 ntdll.dll 导出符号 -
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多