visual-studio - 将/Zi 与/Z7 用于 Visual Studio C++ 项目有什么影响?

标签 visual-studio visual-studio-2008 visual-c++ visual-studio-2005 compiler-construction

背景

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

  • (无)
  • 创建无调试信息
  • 更快的编译时间
  • /Z7
  • 使用 CodeView 格式在 .obj 文件中生成全符号调试信息
  • /Zi
  • 使用程序数据库格式在 .pdb 文件中为目标生成全符号调试信息。
  • 启用对最小重建 (/Gm) 的支持,这可以减少重新编译所需的时间。
  • /ZI
  • 除了支持 Edit-and-Continue 之外,生成/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 格式是一个巨大的胜利,无论是在构建时间还是在调试器启动时间。

    关于visual-studio - 将/Zi 与/Z7 用于 Visual Studio C++ 项目有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/284778/

    相关文章:

    c++ - 解决cuda动态并行

    c# - 如何调整此 GridView 使其只有一个具有相同值的单元格?

    asp.net-mvc - 如何自动设置输入字段的 MAXLENGTH?

    windows-7 - Console.Writeline c# 不工作

    c++ - Visual Studio 2008 C++ 语言支持?

    c - 规范化 _int64 的随机值

    visual-studio - Visual Studio 2017 64 位 IDE?

    c# - 无法让 Console.Writeline 重定向到 Visual Studio 窗口

    c++ - 通过类型转换 C++ 向其添加 0 后,标签文本不会在 Windows 窗体上更新

    c++ - Visual Studio 输出窗口错误 - C++