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

Sam*_*rsa 13 c++ visual-studio-2008 pdb-files

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

如果不是这样,请解释其中的差异.无论哪种方式,我在创建一个DLL地方时该怎么做我可以选择PDB编译器的输出文件以及链接器以及在创建LIB文件时要做什么,其中只有编译器生成PDB文件,因为没有连接.

背景:库/ dll由几个项目使用,然后需要PDB文件进行调试.在lib文件的情况下,没有歧义,因为只PDB生成了一个文件.但是,在一个情况下DLL,我是否需要两个PDB文件来正确调试或只需要链接器生成的文件?

Mic*_*urr 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的时间戳应该匹配.

  • .lib 文件不参与程序的执行或调试。它们只是链接器的输入。lib 文件中的适当“内容”要么成为二进制文件的一部分(对于静态库),要么用于创建 DLL 的动态链接(对于导入库)。在任何一种情况下,调试所需的 .pdb 文件都是链接器在生成实际 .exe 或 .dll 文件时生成的文件。 (2认同)