19

PDB我对编译器和链接器文件分别有什么区别(即在 Visual Studio 中Project Properties > C/C++ > Output Files > Program Database File Name vs Project Properties > Linker > Debugging感到困惑。我试图在网上找到答案,到目前为止我知道(可能是错误PDB的)编译器为文件生成了一个文件,objPDB链接器为二进制文件(exe或dll)生成了一个文件,并且是用于调试。

如果这不是真的,请解释差异。无论哪种方式,当我创建一个DLL我可以选择为编译器和链接器选择输出PDB文件时该怎么做,以及当我创建一个只有编译器生成PDB文件的 LIB 文件时该怎么做没有执行链接。

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

4

1 回答 1

14

老实说,我不知道编译步骤生成的 .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 的时间戳应该匹配。

于 2010-09-26T01:29:04.113 回答