可以在C++项目中使用“热重载”(Hot Reload),它以前称为“编辑并继续”。 有关功能限制的信息,请参阅支持的代码更改(C++)。
可以在C++项目中使用“编辑并继续”。 有关“编辑并继续”的限制的详细信息,请参阅支持的代码更改(C++)。
/Zo(增强优化调试) 编译器选项在未使用 /Od(禁用(调试)) 选项进行编译时,为二进制文件的 .pdb(符号)文件添加额外信息。
选项 /Zo 将禁用“编辑并继续”,如 “如何:调试优化代码”中所述。
启用或禁用热重载
如果在当前调试会话中进行代码编辑且不希望这些更改被应用,则可能需要禁用热重载功能的自动触发。 可以根据需要重新启用自动热重载。
重要
有关功能兼容性的生成所需设置和其他信息,请参阅 Visual Studio 2015 Update 3 中的 C++“编辑并继续”功能。
- 如果当前处于调试会话中,请停止调试(Shift + F5)。
打开 “工具>选项 ”窗格,然后展开“ 所有设置>调试>.NET/C++热重载 ”部分。
若要在从附加调试器(F5)开始时启用热重载,请在右窗格中选中 “启用热重载 ”复选框。
选中复选框后,可以配置以下选项:
热重载选项 Description 违约 继续时自动应用更改(仅限本地环境) 继续附加调试器时应用更改(F5)。 已启用 警告过时代码 当调试器遇到已修改但无法立即应用的代码时,启用警告。 已启用 在未调试时启用 在启动时如果未附加调试器,将启用热重载(Ctrl + F5)。 已启用 在文件保存时应用 保存文件时应用更改。 Disabled 日志记录详细程度 启用热重载时设置日志记录级别。 从 “最小”、“ 详细”或“ 诊断”中进行选择。 最小
打开 “工具>选项 ”对话框,然后展开 “调试>.NET/C++热重载 ”部分。
选择以下一个或多个选项以启用该功能:
启用热重载:从附加调试器开始时启用热重载(F5)。
在未调试的情况下启动时启用热重载:在没有附加调试器的情况下启动时启用热重载(Ctrl + F5)。
在文件保存时启用热重载:保存文件时启用热重载。
日志记录详细程度:启用热重载时设置日志记录级别。 从 “最小 ”、“默认”、“ 详细”或 “诊断”中进行选择。
更改这些设置会影响你处理的所有项目。 更改设置后,无需重新生成应用程序。 如果从命令行或生成文件生成应用程序,但在 Visual Studio 环境中进行调试,则如果设置
/ZI选项,仍然可以使用“编辑并继续”。选择“确定”。
启用或禁用“编辑并继续”
如果要对当前调试会话期间不希望应用的代码进行编辑,则可能需要禁用“编辑并继续”的自动调用。 可以根据需要重新启用自动编辑并继续。
重要
有关功能兼容性的生成设置及其他必需信息,请参阅 Visual Studio 2015 Update 3 中的 C++ 编辑并继续。
如果当前处于调试会话中,请停止调试(Shift + F5)。
打开 “工具>选项 ”对话框,然后展开 “调试>常规 ”部分。
若要启用“编辑并继续”,请选择“ 启用编辑并继续 ”复选框。 若要禁用该选项,请清除该复选框。
在 “编辑并继续 ”组中,选中或清除“ 启用本机编辑并继续 ”复选框。
更改此设置会影响你处理的所有项目。 更改此设置后,无需重新生成应用程序。 如果从命令行或生成文件生成应用程序,但在 Visual Studio 环境中进行调试,则如果设置
/ZI选项,仍然可以使用“编辑并继续”。
显式应用代码更改
在C++中,“编辑并继续”可以通过两种方式应用代码更改。 当选择执行命令时,可以隐式应用代码更改,或者显式使用“应用代码更改”命令来应用代码更改。
当您明确应用代码更改时,程序将保持中断模式:不会执行。
- 若要显式应用代码更改,请在 “调试” 菜单上,选择 “应用代码更改”。
如何停止代码更改
虽然“编辑并继续”正在应用代码更改,但可以停止该操作。
要停止应用代码更改,请执行以下步骤:
在 “调试 ”菜单上,选择 “停止应用代码更改”。
仅当应用代码更改时,此菜单项才可见。
如果选择此选项,则不会提交任何代码更改。
重置执行点
当“编辑并继续”应用更改时,某些代码更改可能会导致执行点移动到新位置。 该功能会尽可能准确地放置执行点,但在所有情况下结果可能不正确。
在C++中,对话框在执行点发生更改时通知你。 在继续调试之前,应验证位置是否正确。 如果不正确,请使用 “设置下一语句 ”命令。 有关详细信息,请参阅 设置要执行的下一个语句。
处理过时的代码
在某些情况下,“编辑并继续”无法立即将代码更改应用到可执行文件,但如果以后继续调试,则可能可以应用代码更改。 如果编辑调用当前函数的函数,或者向调用堆栈上的函数添加 64 个以上的新变量,则会出现这种情况。
在这种情况下,调试器将继续执行原始代码,直到可以应用更改。 过时代码在单独的源窗口中显示为临时源文件窗口,标题如下 enc25.tmp。 编辑的源继续显示在原始源窗口中。 如果尝试编辑过时代码,将显示警告消息。