以前用visual studio 2008时也碰到过类似问题,问题产生的原因就是由于一个Solution下单多个Project是分开编译的,主项目和子项目的pdb文件名相同(默认都是
vc90.pdb或vc100.pdb)从而造成冲突。这个问题对程序的执行不会产生影响,但会导致丢失部分调试信息。
在网上搜到
解决办法,修改pdb文件设置的路径和名称。转贴于此。
Project Configuration Properties -> C/C++ -> Output Files
Program Database File
This name, e.g. $(IntDir)\vc90.pdb, is embedded into the object file and it should be the same as the one in
Project Configuration Properties -> Linker -> Debugging
Generate Program Database File
This is, e.g. $(TargetDir)$(TargetName).pdb
Now the object file contain the path where the library is located, too.
由此引出一个话题,那就是对于分开编译的多个Project组成的一个复杂的Solution如何组织目录文档结构,既保持各个Project相对独立,同时又保证整个Solution调试信息的完整性。我的解决办法是:首先肯定要像上面一样修改各单独Project的pdb的路径和文件名。其次在复制Project编译结果到Solution的Lib时,要把所有的obj文件和pdb文件一起copy过来。要注意单独的Project编译的obj文件和pdb文件路径最好相同,而且使用相对路径"..\"和“.\"打头。文件复制工作可以写成一个批处理,放入主Solution的Pre-Build Event中去。