/Yd(将调试信息放在对象文件中)

更新:2007 年 11 月

当与 /Yc/Z7 选项一起使用时,将完整的调试信息放在从预编译头 (.pch) 文件创建的所有对象文件中。已否决。

/Yd

备注

在 Visual C++ 2005 中,/Yd 已被否决;Visual C++ 现在支持将多个对象写入单个 .pdb 文件中,并改用 /Zi。有关更多信息,请参见Visual C++ 2005 中不推荐使用的编译器选项

除非需要分发包含调试信息的库,否则请使用 /Zi 选项,而不要使用 /Z7/Yd

仅在发布包含调试信息的库时才需要在每个 .obj 文件中存储完整的调试信息。它降低了编译速度,并需要大量的磁盘空间。当使用 /Yc/Z7 而不使用 /Yd 时,编译器将公共调试信息存储在从 .pch 文件创建的第一个 .obj 文件中。编译器不将此信息插入到随后从 .pch 文件创建的 .obj 文件中;它插入对此信息的交叉引用。不论有多少 .obj 文件使用 .pch 文件,只有一个 .obj 文件包含公共调试信息。

虽然这种默认行为导致较少的生成时间并降低磁盘空间要求,但当细微更改要求重新生成包含公共调试信息的 .obj 文件时,它并不可取。在这种情况下,编译器必须重新生成所有包含对原始 .obj 文件的交叉引用的 .obj 文件。而且,如果公共 .pch 文件由不同项目使用,则很难依靠对单个 .obj 文件的交叉引用。

有关预编译头的更多信息,请参见:

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页

  2. 单击“C/C++”文件夹。

  3. 单击“命令行”属性页。

  4. 在“附加选项”框中键入编译器选项。

以编程方式设置此编译器选项

示例

假设有两个基文件 F.cpp 和 G.cpp,每个均包含这些 #include 语句:

#include "windows.h"
#include "etc.h"

下列命令创建预编译头文件 ETC.pch 和对象文件 F.obj:

CL /YcETC.H /Z7 F.CPP

对象文件 F.obj 包含 WINDOWS.h 和 ETC.h(和它们包含的任何其他头文件)的类型信息和符号信息。现在可以使用预编译头 ETC.pch 编译源文件 G.cpp:

CL /YuETC.H /Z7 G.CPP

对象文件 G.obj 不包含预编译头的调试信息,而只引用 F.obj 文件中的此信息。请注意,必须与 F.obj 文件链接。

如果预编译头不是用 /Z7 编译的,仍可以在以后使用 /Z7 编译时使用它。然而,调试信息被放在当前对象文件中,并且调试器不能使用在预编译头中定义的函数和类型的局部符号。

请参见

参考

编译器选项

设置编译器选项