代码之家  ›  专栏  ›  技术社区  ›  Cee McSharpface

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

  •  0
  • Cee McSharpface  · 技术社区  · 5 年前

    在Visual Studio 2017(15.9.16)中,我可以在使用Debug开始构建后继续编辑源文件>启动调试命令(F5)。 虽然我是专门为C#编译器问这个问题的,但知道C++的行为是否不同也会很有趣。

    当我在附加调试器后进行编辑,并且启用了编辑和继续时,编辑会用波浪形的紫色下划线表示,一切都很清楚。

    当我在调试器连接之前进行编辑,并且在构建成功之前保存了我的编辑时,整个事情似乎处于不确定状态。要么是我的编辑太晚了,调试器执行了已构建的代码(除了空心断点项目符号(如果有的话)外并不明显)。或者它是及时的,并且被包括在内。

    当决定是否仍将包含最近的编辑时,构建时间线中的哪个点是?到构建开始的时间戳?不确定?在编译器处理源文件之前?链接器是否检查obj是否是从启动后更改的源生成的?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Mr Qian    5 年前

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

    面对这种行为, C C 项目呈现出两种不同的表现形式:

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

    这与C++项目相反。

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

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

    For C 项目,一旦将光标移动到修改后的零件以触发重建任务,修改后的部分将永久包含在构建文件中。在此过程中,您不需要再次构建项目。

    如果您调试 C 在项目中,当您将光标移动到修改后的部分时,这不会触发自动构建任务,因此该部分不会自动包含在输出文件中,而仅在当前调试阶段。

    因此,当您完成当前的调试过程并开始时 调试 这将再次触发构建过程或单击 建造 直接单击按钮,以便这些编辑可以永久包含在构建文件中。

    总体而言 ,当您单击调试按钮时,构建过程将自动触发,因此您可以稍后进行调试。一旦触发构建,这些部分将永久包含在构建文件中。

    您可以在输出窗口上看到所有这些。