gpt4 book ai didi

c++ - PDB 与 .exe 不匹配

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:40 24 4
gpt4 key购买 nike

我在我的 C++ 应用程序上使用 VS2015 调试器。当我启动应用程序时,调试器给出消息

Loaded 'C:\MyDir\Working\x64\Debug\MyApp.exe'. Cannot find or open the PDB file

因此,我无法设置断点。

根据 VS 调试器和 WidDBG Symchk,在与 .exe 相同的目录中有一个 .pdb 文件,但它不匹配。 Symchk 不提供不匹配的原因,即使使用/v 选项也是如此。

完全重建并不能解决这个问题。它只发生在调试版本中,今天才开始。在今天之前,对于调试或发布版本,不匹配的 pdb 没有问题。

我使用的 VS 选项是:

  • C++:调试信息格式=Program Database (/Zi),Program Database File Name=$(IntDir)%(Filename).pdb;
  • 链接器:生成调试信息=优化调试 (/DEBUG),生成程序数据库文件=$(OutDir)MyApp.pdb,生成完整程序数据库文件=是。

各个对象的 pdb 文件出现在中间目录中,MyApp.pdb 出现在输出目录中,与 MyApp.exe 一起出现。

现在,这是奇怪的部分:当删除现有的 MyApp.pdb 然后重新链接时,一个新的 .pdb 文件会出现在输出目录中,其中包含当前的 mod 时间。当链接器运行时,pdb 文件变大(~70 MB),但当链接器完成时,pdb 文件突然变小(~4 MB),并且 mod 时间变为今天早几个小时。这是非常可疑的,可能是 pdb 不匹配的原因。

链接器的最终输出行是

 Finished searching libraries
MyApp.vcxproj -> C:\MyDir\Working\x64\Debug\MyApp.exe
MyApp.vcxproj -> C:\MyDir\Working\x64\Debug\\MyApp.pdb (Full PDB)

我如何强制 VS 为调试版本生成匹配且正确的 pdb 文件?

最佳答案

更新:问题是在中间目录中创建了一个 pdb 文件 MyApp.pdb(它是编译器为 MyApp.cpp 创建的 pdb 文件)。出于某种原因,链接器在最后用这个文件替换了“真正的”pdb 文件。由于它们具有相同的名称 MyApp.pdb,Symchk 不会显示名称不匹配(尽管可能存在不明显的时间戳不匹配)。

MyApp.cpp 的调试信息如何包含在最终的 MyApp.pdb 中并不明显。

关于c++ - PDB 与 .exe 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44662048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com