【发布时间】:2020-01-31 10:26:43
【问题描述】:
在 Visual Studio 2017 (15.9.16) 中,我可以在使用 Debug > Start Debugging 命令 (F5) 开始构建后继续编辑源文件。 虽然我专门针对 C# 编译器提出了这个问题,但如果 C++ 的行为有所不同也会很有趣。
当我在附加调试器并启用编辑并继续后进行编辑时,编辑会带有波浪形的紫色下划线,一切都很清楚。
当我在附加调试器之前进行编辑,并且我的编辑在构建成功之前被保存,整个事情似乎处于不确定状态。要么我的编辑太晚了,调试器就会执行已经构建的代码(除了空心断点项目符号,如果有的话,不明显)。或者它是及时的,并且被包括在内。
确定是否仍将包含最近的编辑时,构建时间轴的点在哪里?通过构建开始的时间戳?不定?在编译器处理源文件之前?链接器是否检查 obj 是否是从启动后更改的源生成的?
【问题讨论】:
-
对于c#项目,实际上,当您勾选
Enable Edit and Contniue选项时,只有当您将断点执行箭头返回到更改部分时,代码更改才会应用到调试器中。但是这些更改被放入一个临时库中,仅用于调试目的,并没有构建到输出路径(obj 和 bin)中。仅当您在中断和再次调试时开始构建时才包含此内容。这就是 C# 机制。 -
这与 C++ 项目相反。当您将光标移动到 c++ 项目的修改部分时,它会触发构建任务来重新编译项目,这将直接包含这些更改。这是在构建过程中包含修改部分的时间。
-
这两个cmets几乎形成了一个完整的答案。只有一个细节仍然困扰着我:在构建过程中多久可以保存对源文件的更改,以便它们的最新版本仍将包含在正在进行的构建输出中?
标签: c# visual-studio msbuild edit-and-continue