【发布时间】:2017-11-23 12:40:53
【问题描述】:
我在我的 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++:调试信息格式=程序数据库(/Zi),程序数据库文件名=$(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 文件?
【问题讨论】:
标签: c++ visual-studio pdb-files