c# - 构建时编辑时 Visual Studio 的行为
问题描述
在 Visual Studio 2017 (15.9.16) 中,我可以在使用 Debug > Start Debugging 命令 (F5) 开始构建后继续编辑源文件。虽然我专门针对 C# 编译器提出了这个问题,但了解 C++ 的行为是否不同也会很有趣。
当我在附加调试器后进行编辑并启用编辑并继续时,编辑会带有波浪形的紫色下划线,一切都很清楚。
当我在调试器附加之前进行编辑,并且在构建成功之前保存我的编辑时,整个事情似乎处于不确定状态。要么我的编辑太晚了,调试器就会执行已经构建的代码(除了空心断点项目符号,如果有的话,不明显)。或者它是及时的,并且被包括在内。
当决定是否仍将包含最近的编辑时,构建时间线中的点在哪里?通过构建开始的时间戳?不定?在编译器处理源文件之前?链接器是否检查 obj 是否是从启动后更改的源生成的?
解决方案
构建时编辑时 Visual Studio 的行为
面对这种行为,C#和C++项目表现出两种不同的表现:
对于c#项目,实际上,当您选中该选项时Enable Edit and Contniue
,只有当您将断点执行箭头返回到更改部分时,代码更改才会应用到调试器中。但是这些更改被放入一个临时库中,仅用于调试目的,并没有构建到输出路径(<code>obj 和bin
)中。仅当您在中断和再次调试时开始构建时才包含此内容。这就是 C# 机制。
这与 C++ 项目相反。
对于C++项目,当您将光标移动到 c++ 项目的修改部分时,它会触发 build 任务重新编译项目,这将直接包含这些更改。这是在构建过程中包含修改部分的时间。
您可以在构建过程中保存对源文件的更改多长时间,以便它们的最新版本仍将包含在正在进行的构建输出中?
对于C++项目,一旦将光标移动到修改部分以触发重建任务,修改部分将永久包含在构建文件中。在此过程中,您无需再次构建项目。
如果你调试一个C#项目,当你把光标移动到修改的部分时,这并不会触发自动构建任务,所以这个部分不会自动包含在输出文件中,而只是在当前调试阶段。
因此,当您完成当前调试过程然后再次开始调试时,这将触发构建过程或直接单击构建按钮,以便这些编辑可以永久包含在构建文件中。
总的来说,当你点击调试按钮时,构建过程会自动触发,所以你可以稍后调试。一旦触发构建,这些部分将永久包含在构建文件中。
您可以在“输出”窗口中看到所有这些。
推荐阅读
- javascript - Vegas Slide - Texte 过渡
- android - Xamarin ListView 为空或未填充
- java - 如何知道从数组中选择了哪个字符串?
- java - 从 C 客户端读取套接字到 Java 服务器时出现“空白”是否有原因?
- python-3.x - 根据索引将值从一个数据帧附加到另一个数据帧
- dask - Dask 调度程序退出并在 'ddf.persist()' 上输出 'Killed'
- vmware-workstation - Vmware Workstation如何隐藏顶部栏并且仍然可以使用多个显示器
- python - python中包含字典的函数
- javascript - 用于将 PNG 文件作为图层导入的 Adobe After Effects 脚本
- xcode - 如何在 xocde 11 中生成 ipa?