我在我的C ++应用程序上使用VS2015调试器。当我启动应用程序时,调试器会给出消息
Loaded 'C:\MyDir\Working\x64\Debug\MyApp.exe'. Cannot find or open the PDB file
因此,我无法设置断点。
与.exe相同的目录中有.pdb文件,但根据VS调试器和WidDBG Symchk,它不匹配。即使使用/ v选项,Symchk也不会提供不匹配的原因。
完全重建不会使这个问题消失。它只发生在调试版本中,它刚刚开始。在今天之前,对于调试或发布版本,pdb不匹配没有问题。
我使用的VS选项是:
单个对象的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文件?
答案 0 :(得分:3)
更新:问题是在中间目录中创建了一个pdb文件MyApp.pdb(它是由编译器为MyApp.cpp创建的pdb文件)。出于某种原因,链接器最后用这个替换了“真正的”pdb文件。由于它们具有相同的名称,MyApp.pdb,Symchk不会显示名称不匹配(尽管可能存在时间戳不匹配,但不明显)。
MyApp.cpp的调试信息如何包含在最终的MyApp.pdb中并不明显。