我越来越困惑,什么是编译器和链接PDB
文件分别(即在Visual Studio中,Project Properties > C/C++ > Output Files > Program Database File Name
VSProject Properties > Linker > Debugging
)之间的差异。我试图在网上找到答案,到目前为止我知道(可能是错误的)编译器的PDB
文件生成obj
文件,而PDB
文件由链接器生成的二进制文件(exe或dll),并且是一个用于调试。编译器PDB文件和链接器PDB文件
如果不是这样,请说明不同之处。无论哪种方式,当我创建DLL
时,我可以选择输出PDB
文件以选择编译器以及链接器,以及在创建LIB文件时只执行编译器生成PDB
文件的操作因为没有执行链接。
背景:库/ DLL是由几个项目,然后需要
PDB
文件用于调试。在lib
文件的情况下,不存在歧义,因为只生成一个PDB
文件。但是,在DLL
的情况下,我是否需要PDB
文件才能正确调试,或者只需要链接器生成的文件?
(您更新之前发布此,但它适用于更新以及) 所以,当我创建'lib'文件(即静态库),只有编译器可以生成'PDB '文件,因为链接器不再需要,这是否意味着现在由编译器生成的'pdb'文件是调试所需的文件? – Samaursa 2010-09-26 01:36:46
.lib文件不涉及程序的执行或调试。它们只是链接器的输入。 lib文件中适当的'stuff'可以作为二进制文件的一部分(对于静态库),或者用于创建DLL的动态链接(在导入库的情况下)。 无论在哪种情况下,您需要调试的.pdb文件都是在生成实际的.exe或.dll文件时由链接器生成的.pdb文件。 – 2010-09-26 01:57:23
太好了,谢谢你对Michael的阐述,我会继续检查这个答案。虽然因为我们关于这个问题,如果你能回答这个问题。 Havok SDK是静态链接的,它的所有库都有它们各自的'PDB'文件。有趣的是,如果你在同一个目录下没有附带'PDB'文件的库链接,那么Visual Studio会给出大量的警告:'调试信息丢失,编译好像没有提供调试信息'(我是解释) – Samaursa 2010-09-26 02:10:36