【问题标题】:Behavior of Visual Studio when editing whilst building构建时编辑时 Visual Studio 的行为
【发布时间】: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


【解决方案1】:

在构建时编辑时 Visual Studio 的行为

面对这种行为,C#C++项目表现出两种不同的表现:

对于c#项目,实际上,当您勾选Enable Edit and Contniue选项时,只有在将断点执行箭头返回到更改部分时,代码更改才会应用到调试器中。但是这些更改被放入一个临时库中,仅用于调试目的,并没有构建到输出路径中(objbin)。仅当您在中断和再次调试时开始构建时才包含此内容。这就是 C# 机制。

这与 C++ 项目相反。

对于C++项目,当你将光标移动到一个c++项目的修改部分时,它会触发构建任务来重新编译项目,这将直接包含这些更改.是在构建过程中包含修改部分的时间。

您可以在构建过程中保存对源文件的更改多长时间 所以他们的最新版本仍将包含在正在进行的构建中 输出?

对于C++项目,一旦将光标移动到修改部分触发重建任务,修改部分将永久包含在构建文件中。在此过程中,您无需再次构建项目。

如果你调试一个C#项目,当你将光标移动到修改的部分时,这并不会触发自动构建任务,所以这部分不会自动包含在输出文件中,而只是在当前调试阶段。

所以当你完成当前的调试过程,然后再次启动debug,这将触发构建过程或直接点击build按钮,这样这些编辑就可以永久包含在构建文件。

总体来说,当你点击调试按钮时,构建过程会自动触发,方便你后期调试。一旦触发构建,这些部分将永久包含在构建文件中。

您可以在“输出”窗口中看到所有这些内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2021-06-25
    • 1970-01-01
    • 2018-10-16
    • 2015-07-10
    • 2013-08-09
    • 1970-01-01
    相关资源
    最近更新 更多