编译器PDB文件和链接器PDB文件

时间:2010-09-26 00:17:31

标签: c++ visual-studio-2008 pdb-files

我对编译器和链接器PDB文件之间的区别感到困惑(即在Visual Studio中,Project Properties > C/C++ > Output Files > Program Database File Name vs {{1 }})。我试图在线找到答案,到目前为止我知道(可能是错误的)编译器的Project Properties > Linker > Debugging文件是为PDB文件生成的,而链接器的obj文件是为二进制(exe或dll)生成的,是用于调试的。

如果不是这样,请解释其中的区别。无论哪种方式,我在创建PDB时该怎么做我可以选择编译器的输出DLL文件以及链接器以及创建LIB文件时要执行的操作只有编译器生成PDB文件,因为没有执行链接。

  

后台:几个项目使用库/ dll,然后需要PDB个文件进行调试。对于PDB文件,没有歧义,因为只生成了一个lib文件。但是在PDB的情况下,我是否需要DLL文件才能正确调试,或者只需要链接器生成的文件?

1 个答案:

答案 0 :(得分:12)

老实说,我不知道编译步骤生成的.pdb文件究竟用于什么 - 我假设它是链接器将最终的.pdb文件拉入最终的.pdb文件中的一些中间信息。

但是,最重要的是,出于调试目的,您只需要链接器生成的.pdb文件。


更新:从http://blogs.msdn.com/b/yash/archive/2007/10/12/pdb-files-what-are-they-and-how-to-generate-them.aspx

进行了一次挖掘
  

两种类型的.PDB文件是什么?

     

==============================

     

有两种类型的PDB文件。一   由编译器生成的名为   VCx0.PDB(例如vc80.pdb)和另一个   .PDB。

     

VCx0.PDB文件由。生成   编译器,它与.OBJ有关   文件。它包含类型信息   仅

     

.PDB文件是   由链接器生成,它是   与目标可执行文件相关或   DLL。这个文件包含   完整的调试信息。当我们   调试,我们需要这个'.pdb'文件   用于对齐符号。该   目标文件的时间戳和   PDB应匹配。