解决visual studio 2010下warning LNK4099 PDB vc100.pdb was not found问题

 

编者:李国帅

qq:9611153 微信lgs9611153

时间:2018-2-7

 

问题描述及期望效果:

以前用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中去。

 

消除warning其他方法:

 

在工程属性页 配置 release 平台 活动(win32)设置:

配置属性 -> 链接器 -> 调试 -> 生成调试信息 -> 否

 

程序数据库(PDB)文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。

当以/ZI或/Zi(用于C/C++)生成时,将创建一个PDB文件。

 

在VisualC++中,/Fd选项用于命名由编译器创建的PDB文件。当使用向导在VisualStudio中创建项目时,/Fd选项被设置为创建一个名为project.PDB的PDB。

 

如果使用生成文件创建C/C++应用程序,并指定/ZI或/Zi而不指定/Fd时,则最终将生成两个PDB文件:

  *VC80.PDB (更笼统地说就是VCx0.PDB,其中x表示VisualC++的版本。)该文件存储各个OBJ文件的所有调试信息并与项目生成文件驻留在同一个目录中。

  *project.PDB 该文件存储.exe文件的所有调试信息。对于C/C++,它驻留在/debug子目录中。

 

每当创建OBJ文件时,C/C++编译器都将调试信息合并到VCx0.PDB中。插入的信息包括类型信息,但不包括函数定义等符号信息。因此,即使每个源文件都包含公共头文件(如<windows.h> ),这些头文件中的typedef也只存储一次,而不是在每个OBJ文件中都存在。

 

链接器将创建project.PDB,它包含项目的EXE文件的调试信息。project.PDB文件包含完整的调试信息(包括函数原型),而不仅仅是在VCx0.PDB中找到的类型信息。这两个PDB文件都允许增量更新。链接器还在其创建的.exe或.dll文件中嵌入.pdb文件的路径。

 

VisualStudio调试器使用EXE或DLL文件中的PDB路径查找project.PDB文件。如果调试器在该位置无法找到PDB文件或者如果路径无效(例如,如果项目被移动到了另一台计算机上),调试器将搜索包含EXE的路径,即在“选项”对话框(“调试”文件夹,“符号”节点)中指定的符号路径。调试器不会加载与所调试的二进制不匹配的PDB。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值