背景

您可以将几种不同的debug flags与Visual Studio C++编译器一起使用。他们是:

  • (无)
  • 不创建调试信息
  • 编译时间更快
  • / Z7
  • 使用CodeView格式
  • 在.obj文件中生成符号完整的调试信息
  • / Zi
  • 使用程序数据库格式在目标的.pdb文件中生成符号完整的调试信息。
  • 启用对最小重建(/ Gm)的支持,这可以减少重新编译所需的时间。
  • / ZI
  • 除支持编辑并继续
  • 之外,生成调试信息,如/ Zi

    问题
  • / Gm标志与/MP flag for Multiple Process builds(Visual Studio 2005/2008)
  • 不兼容
  • 如果要启用最少的重建,则/ Zi标志比/ Z7标志更为必要。
  • 如果要使用/ MP标志,则看MSDN的/ Z7和/ Zi之间似乎没有区别。但是,SCons documentation指出必须使用/ Z7来支持并行构建。

  • 问题
  • 在Visual Studio C++项目中使用/ Zi与/ Z7的含义是什么?
  • 对于我错过的这些选项,还有其他优点或缺点吗?
  • 具体来说,对于目标而言,单一的程序数据库格式(PDB)文件与对于每个源而言的多个CodeView格式(.obj)文件相比,有什么好处?

  • 引用文献

    MDSN /Z7, /Zi, /ZI (Debug Information Format)

    MSDN /MP (Build with Multiple Processes)

    SCons Construction Variables CCPDBFLAG

    Debug Info

    最佳答案

    Codeview是一种较旧的调试格式,早在1980年代中期的Microsoft C编译器时代便随Microsoft的旧式独立调试器一起引入。它占用磁盘上更多的空间,并且调试器需要更长的时间来解析,这是链接期间处理的主要难题。当我在1998-2000年从事Windows版CodeWarrior时,是从编译器生成的。

    一个优点是Codeview是一种文档格式,其他工具在无法处理PDB格式的调试数据库时通常可以对其进行处理。另外,如果您一次要构建多个文件,则没有争用要写入项目的调试数据库。但是,对于当今大多数使用情况而言,无论是在构建时还是在调试器启动时,使用PDB格式都是一个大赢家。

    08-26 18:09