簡體   English   中英

編譯時編輯時 Visual Studio 的行為

[英]Behavior of Visual Studio when editing whilst building

在 Visual Studio 2017 (15.9.16) 中,我可以在使用 Debug > Start Debugging 命令 (F5) 開始構建后繼續編輯源文件。 雖然我專門為 C# 編譯器詢問了這個問題,但知道 C++ 的行為是否不同也會很有趣。

當我在附加調試器后進行編輯並啟用編輯並繼續時,編輯會用波浪線紫色下划線,一切都清楚了。

當我在調試器附加之前進行編輯,並且在構建成功之前保存我的編輯時,整個事情似乎處於不確定狀態。 要么我的編輯太晚了,調試器執行已構建的代碼(不明顯,除了空心斷點項目符號,如果有的話)。 或者它是及時的,並且被包括在內。

在決定是否仍包含最近的編輯時,構建時間表的重點在哪里? 通過構建開始的時間戳? 不定? 緊接在源文件被編譯器處理之前? 鏈接器是否檢查 obj 是否是從啟動后更改的源生成的?

編譯時編輯時 Visual Studio 的行為

面對這種行為, C#C++項目表現出兩種不同的表現:

對於c#項目,實際上,當你勾選Enable Edit and Contniue選項時,只有當你將斷點執行箭頭返回到更改部分時,代碼更改才會應用到調試器中。 但是這些更改被放入一個臨時庫中,僅用於調試目的,並沒有被構建到輸出路徑( objbin )中。 僅當您在中斷和再次調試時開始構建時才包含此項。 這就是 C# 機制。

這與 C++ 項目相反。

對於C++項目,當您將光標移動到C++項目的修改部分時,它會觸發構建任務重新編譯該項目,該任務將直接包含這些更改。 這是在構建過程中包含修改部分的時間。

在構建過程中多久可以保存對源文件的更改,以便它們的最新版本仍將包含在正在進行的構建輸出中?

對於C++項目,一旦將光標移動到修改部分觸發重建任務,修改部分將永久包含在構建文件中。 在此過程中,您無需再次構建項目。

如果你調試一個C#項目,當你將光標移動到修改的部分時,這不會觸發自動構建任務,所以這部分不會自動包含在輸出文件中,而只是在當前調試階段。

因此,當您完成 crrent 調試過程然后再次開始調試時,這將觸發構建過程或直接單擊構建按鈕,以便這些編輯可以永久包含在構建文件中。

總的來說,當您點擊調試按鈕時,構建過程會自動觸發,因此您可以稍后進行調試。 一旦觸發構建,這些部分將永久包含在構建文件中。

您可以在“輸出”窗口中看到所有這些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM