关于'可调试性'的/ Z7和/ Zi之间的区别

Pat*_*ick 5 c++ debugging visual-studio-2010 pdb-files

我正在管理一个关于xxx源文件的大型应用程序(Visual Studio 2010).

很多年以来,我们使用/ Zi编译我们的发布版本以获取存储在我们的符号服务器中的PDB文件.多年来,我们注意到我们的构建脚本变得越来越慢,现在构建可执行文件需要2个多小时.

诸如使用/ Zi vs/Z7对Visual Studio C++项目有何影响?似乎表明/ Z7是旧的格式,并且/ Zi是首选.

尽管如此,我们尝试使用/ Z7执行构建脚本,并且我们看到从2小时到大约20分钟的大量时间缩短.我们还尝试使用/ Zi但每个源文件使用1个PDB文件(链接器仍然在一个大PDB文件中合并),这也提高了编译性能,但略微降低了链接时间性能.

为了优化构建时间,我想切换回/ Z7(链接器最终仍会生成一个PDB文件),但我不确定这是否会对应用程序的"可调试性"产生影响.

问题:

  • 与/ Z7一起编译时,链接器生成的PDB文件的内部调试格式是否与/ Zi相比(可能格式相同,只是编译器存储调试信息的地方不同)?
  • 与/ Zi相比,/ Z7是否会阻止某些调试?
  • 对于发布版本,一般建议使用哪种调试格式(/ Zi,/ Z7)?