/PDB 和 /Fd 选项有什么区别
What is the difference between /PDB and /Fd options
链接器有 /Fd option for the compiler and the /PDB 选项。虽然 /PDB
默认为 $(OutDir)$(TargetName).pdb
,但编译器选项 /Fd
默认为 $(IntDir)vc$(PlatformToolsetVersion).pdb
。因此,在构建期间会生成两个文件。根据文档,两者都称为 Program Database File,并且都与调试信息相关。这两个文件有什么区别?
VCxxx.pdb 文件主要是静态库项目所必需的。它存储库的调试信息。链接器在生成调试器使用的最终 PDB 文件时需要它,它会为链接到最终映像的实际函数选择相关的调试信息记录。
还有一些其他的东西,模糊的,我认为它提供了依赖信息。自 VS2015 Update 1 以来可用的 /Debug:FASTLINK 选项使它变得更加复杂,现在它还在运行时提供调试信息。这会花费生成完整 PDB 的精力,这对于大型项目来说相当昂贵,而调试器会花费更多时间来挖掘 VCxxx.pdb 文件。几乎总是胜利。我还没有找到覆盖 /Fd 的充分理由,但总是首选默认构建选项。
链接器有 /Fd option for the compiler and the /PDB 选项。虽然 /PDB
默认为 $(OutDir)$(TargetName).pdb
,但编译器选项 /Fd
默认为 $(IntDir)vc$(PlatformToolsetVersion).pdb
。因此,在构建期间会生成两个文件。根据文档,两者都称为 Program Database File,并且都与调试信息相关。这两个文件有什么区别?
VCxxx.pdb 文件主要是静态库项目所必需的。它存储库的调试信息。链接器在生成调试器使用的最终 PDB 文件时需要它,它会为链接到最终映像的实际函数选择相关的调试信息记录。
还有一些其他的东西,模糊的,我认为它提供了依赖信息。自 VS2015 Update 1 以来可用的 /Debug:FASTLINK 选项使它变得更加复杂,现在它还在运行时提供调试信息。这会花费生成完整 PDB 的精力,这对于大型项目来说相当昂贵,而调试器会花费更多时间来挖掘 VCxxx.pdb 文件。几乎总是胜利。我还没有找到覆盖 /Fd 的充分理由,但总是首选默认构建选项。