/dynamicdeopt(启用C++动态调试)(预览版)

重要

/dynamicdeopt 编译器开关目前以预览版提供。 此信息与可能在发布前进行实质性修改的预发行版功能有关。 Microsoft 不对此处提供的信息作任何明示或默示的担保。

启用 C++动态调试(预览版),以便可以像编译优化代码一样调试优化代码,并使用按需函数取消优化在任意位置单步调试。

语法

/dynamicdeopt
/dynamicdeopt:suffix <suffix>
/dynamicdeopt:sync

论据

suffix
指定未优化输出的文件扩展名。

在没有选项的情况下,test.cpp 作为输入,输出包括 test.objtest.exetest.pdb,以及 test.alt.objtest.alt.exetest.alt.pdb。 此开关允许你将未优化二进制生成项目的后缀从 .alt 更改为其他内容。 如果更改后缀,则所有文件都必须使用新的后缀,并且它需要使用 /dynamicdeopt:suffix(预览版)匹配传递给链接器的名称。 通常不要使用此开关,除非需要避免与你拥有的其他文件发生文件名冲突。

sync
生成优化输出后生成未优化输出,而不是并行生成。 默认情况下,编译器会生成代码生成器的并行实例。 此开关使它们可以串行运行。 如果此开关更适合生成环境,则提供此开关。

注解

从 Visual Studio 2022 版本 17.14 预览版 2 开始提供的此预览标志仅适用于 x64 项目,并且必须与相应的链接器标志一起使用,/DYNAMICDEOPT

使用 /dynamicdeopt 进行编译会生成用于调试的其他二进制文件。 在优化文件中调试优化函数时,调试器会改为执行备用二进制文件。 这样就可以像调试未优化代码一样进行调试,同时仍获得优化代码的性能优势。

/dynamicdeopt 需要:

/DEBUG/DEBUG:FULL。 如果未指定 /DEBUG,或者指定 /DEBUG:FASTLINK,则链接器将产生致命错误。 如果指定 /INCREMENTAL,编译器将生成警告并自动关闭 /INCREMENTAL。 如果指定 /OPT:ICF,编译器将生成一条警告,指出调试体验不太好。 这是因为 ICF 可能会导致函数从替换文件中删除,这意味着无法单步执行它们。

IncrediBuild 10.24 支持C++动态调试版本。
FastBuild v1.15 支持C++动态调试版本。

/dynamicdeopt 与编辑并继续不兼容,并且以下编译器开关:

/GL
/ZI
/RTC1
/RTCs
/RTCc
/RTCu
/GH
/Gh
/fastcap
/callcap
/ZW
/fsanitize=address
/fsanitize=kernel-address
All of the CLR flags

在 Visual Studio 开发环境中设置此链接器选项

可以在 Visual Studio 中设置此开关。 有关详细信息,请参阅 C++动态调试(预览版)。 在 Visual Studio 中设置开关有好处,因为 MSBuild 会自动禁止某些不兼容的开关,例如 /GL/OPT:ICF。 它还设置相应的链接器选项(/DYNAMICDEOPT)。 还可以在命令行中设置开关。

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

另请参阅

C++动态调试(预览版)
MSVC 编译器选项
MSVC 编译器命令行语法