了解 Visual Studio Code 中的 .NET 偵錯工具
在上一個單元中,您已了解偵錯工具可協助您控制程式執行並觀察其狀態。 在此節中,您將了解如何在 Visual Studio Code 中執行那兩個工作。
讓我們從了解如何設定 Visual Studio Code 偵錯工具以搭配 .NET 使用開始。
針對 .NET 偵錯設定 Visual Studio Code
當您第一次在 Visual Studio Code 中開啟 C# 檔案時,系統將會提示您安裝建議的 C# 延伸模組。
Visual Studio Code 將會安裝 C# 延伸模組,而且會顯示額外的提示,以新增必要資產來建置您的專案並對其進行偵錯。
注意
您可以選擇從 Marketplace 安裝 \(英文\) Visual Studio Code 中的 C# 語言支援。 當您開啟 C# 檔案時,Visual Studio Code 會自動提示您安裝此延伸模組 (如果您尚未這麼做)。 如果您在 Visual Studio Code 中建置 .NET 應用程式或對其進行偵錯時遇到問題,則應該確認您的專案具備必要資產 \(英文\) 可支援 C# 語言。
中斷點
您已在上一單元中已解,偵錯工具可協助您分析並控制程式執行。 當您啟動 Visual Studio Code 偵錯工具時,其會立即開始執行程式碼。 由於程式碼會非常快速地執行,因此,您必須能夠在任何陳述式上暫停程式。 您將使用「中斷點」來執行該動作。
您可以在 Visual Studio Code 中,於要中斷的那一行上按一下行號左側來新增中斷點。 啟用中斷點之後,您應該會看到紅色圓圈。 再次選取紅色圓圈即可移除。
如果您以滑鼠右鍵按一下來新增中斷點,也可以選擇 [新增條件中斷點]。 這是一種特殊的中斷點,可讓您輸入中斷執行的「條件」。 這種中斷點只有在符合指定條件時才會啟用。 您也可以用滑鼠右鍵按一下現有的中斷點,然後選取 [編輯中斷點] 加以修改。
Visual Studio Code 偵錯工具概觀
在設定好中斷點並啟動應用程式之後,畫面上會出現新的資訊面板和控制項。
- 偵錯工具啟動控制項
- 變數狀態
- 監看的變數狀態
- 目前的呼叫堆疊
- 中斷點
- 執行控制項
- 目前的執行步驟
- 偵錯主控台
偵錯工具啟動控制項
您可以在側邊欄的頂端找到啟動控制項:
- 開始偵錯。
- 選取作用中的啟動設定。
- 編輯
launch.json
檔案。 若有需要,請加以建立。 - 開啟偵錯終端。
檢視並編輯變數狀態
當您分析程式缺陷的成因時,請監看變數狀態,以尋找非預期的變更。 您可以使用 [變數] 面板來密切注意變數狀態。
變數會依範圍依序顯示:
- [區域變數] 可在目前範圍中存取,通常為目前函式。
- [全域變數] 可從程式中任何地方存取。 也會包含 JavaScript 執行階段中的系統物件,因此如果在那裡面看到很多東西,請不要感到驚訝。
- [結束變數] 可從目前結束 (如果有的話) 存取。 結束會將函式的區域範圍與其所屬外部函式的範圍互相結合。
您可以選取箭號來展開範圍和變數。 在展開物件時,您可以看到在這個物件中定義的所有屬性。
您可以在變數上按兩下,即可快速變更該變數的值。
在編輯器視窗中將滑鼠游標直接暫留在函式參數或變數上,即可查看其值。
監看變數
每次想要跨時間或在不同函式之間追蹤變數狀態時都必須進行搜尋,可能會相當煩人。 這就是 [監看] 面板能夠派上用場的地方。
您可以選取 [加號] 按鈕,以輸入要監看的變數名稱或運算式。 或者,您也可以用滑鼠右鍵按一下 [變數] 面板中的變數,然後選取 [加入監看]。
執行程式碼時,[監看] 面板內的所有運算式都會自動更新。
呼叫堆疊
每次程式輸入函式時,都會在呼叫堆疊中新增一個項目。 當應用程式變得很複雜,而且您有會在函式內多次呼叫的函式時,呼叫堆疊便能表示函式呼叫的軌跡。
這有助於找出例外狀況的來源。 如果程式發生非預期的損毀,您通常會在主控台看到類似下面範例的內容:
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9
錯誤訊息下的這組 at [...]
行稱為「堆疊追蹤」。 堆疊追蹤提供在發生例外狀況之前呼叫的每個函式的名稱與來源。 由於其也包含來自 .NET 執行階段的內部函式,因此可能會有點難以辨認。
這就是 Visual Studio Code 的 [呼叫堆疊] 面板派上用場的地方。 可篩選掉不必要的資訊,預設只顯示您自己程式碼中的相關函式。 然後,您可以展開此呼叫堆疊,以找出例外狀況的出處。
中斷點面板
在 [中斷點] 面板中,您可以看見並切換您放置在程式碼中的所有中斷點。 您也可以切換選項,在已攔截或未攔截的例外狀況下中斷。 您可以使用 [中斷點] 面板來檢查程式狀態,並在發生錯誤時使用 [呼叫堆疊] 追蹤例外狀況的來源。
控制執行
您可以使用這些控制項來控制程式的執行流程。
這些控制項從左至右為:
- 繼續或暫停執行:如果已暫停執行,則此控制項會繼續執行,直到遇到下一個中斷點為止。 如果程式正在執行,則按鈕會切換至暫停按鈕,以供用來暫停執行。
- 逐步執行:執行目前內容中的下一個程式碼陳述式。
- 逐步執行:如同 [逐步執行程序],但如果下一個陳述式是函式呼叫,則移至此函式的第一個程式碼陳述式 (與
step
命令相同)。 - 跳出:如果您位於函式內,則執行此函式的剩餘程式碼,並跳回初始函式呼叫之後的陳述式 (與
out
命令相同)。 - 重新啟動:從頭開始執行程式。
- 停止:結束執行並退出偵錯工具。
使用偵錯主控台
您可以針對 Windows 與 Linux 選取 Ctrl+Shift+Y 來顯示或隱藏偵錯主控台。 在 Mac 中,則選取 Cmd+Shift+Y。 您可以使用偵錯主控台將應用程式主控台記錄視覺化。 其也可以用來評估目前執行內容中的運算式或執行程式碼,如同內建 .NET 偵錯工具中的命令或變數名稱。
您可在偵錯主控台底部的輸入欄位中輸入 .NET 運算式,然後選取 Enter 來加以評估。 結果會直接顯示在主控台中。
透過使用偵錯主控台,您就可以快速檢查變數值、以不同的值測試函式,或改變目前的狀態。
注意
雖然偵錯主控台對於執行及評估 .NET 程式碼非常有用,但當您嘗試執行 .NET 主控台應用程式或對其進行偵錯時,由於偵錯控制台不接受執行中程式的終端輸入,因此可能會有些混亂。
若要在偵錯時處理終端輸入,您可以使用整合式終端 (其中一個 Visual Studio Code 視窗) 或外部終端。 針對此教學課程,您會使用整合式終端。
開啟 .vscode/launch.json。
將
console
設定變更為integratedTerminal
,從:"console": "internalConsole",
變更為:
"console": "integratedTerminal",
儲存您的變更。
在下一個單元中,您將了解如何使用偵錯工具,來修正我們先前所看見之 Fibonacci 程式碼中的錯誤 (Bug)。