了解 Visual Studio Code 中的 .NET 偵錯工具
在上一個單元中,您已了解偵錯工具可協助您控制程式執行並觀察其狀態。 在本節中,您將瞭解如何在Visual Studio Code 中執行這兩項工作。
讓我們從瞭解如何設定 Visual Studio Code 調試程式以搭配 .NET 使用它開始。
針對 .NET 偵錯設定 Visual Studio Code
當您第一次在 Visual Studio Code 中開啟 C# 檔案時,系統將會提示您安裝建議的 C# 延伸模組。
Visual Studio Code 會安裝 C# 擴充功能,並顯示額外的提示,以新增必要的資產來建置和偵錯您的專案。
備註
Visual Studio Code 中的 C# 語言支援是可以在 Marketplace 安裝的選擇性功能。 如果您尚未開啟 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 into:與 Step over 類似,但如果下一行是函式呼叫,則移至此函式的第一個程式碼語句(與
step命令相同)。 - 步出:如果您在函式內,請執行此函式的剩餘程式碼,然後跳回到初始函式呼叫後的語句(與
out命令相同)。 - 重新啟動:從頭開始重新啟動程式。
- 停止:結束執行並結束調試程式。
使用偵錯主控台
您可以選取適用於 Windows 和 Linux 的 Ctrl+Shift+Y 來顯示或隱藏偵錯控制台。 選擇 Cmd+Shift+Y 適用於 Mac。 您可以使用偵錯主控台將應用程式控制台記錄視覺化。 您也可以使用它來評估表達式,或在目前的執行內容中執行程序代碼,例如內建 .NET 調試程式中的命令或變數名稱。
您可以在偵錯控制台底部的輸入字段中輸入 .NET 表達式,然後選取 Enter 來評估它。 結果會直接顯示在控制台中。
藉由使用偵錯控制台,您可以快速檢查變數值、測試具有不同值的函式,或改變目前狀態。
備註
雖然偵錯控制台對於執行和評估 .NET 程式代碼非常有用,但當您嘗試執行或偵錯 .NET 控制台應用程式時,可能會有點混淆,因為偵錯控制台不接受執行中程式的終端輸入。
若要在偵錯時處理終端機輸入,您可以使用整合式終端機(其中一個 Visual Studio Code 視窗)或外部終端機。 在本教學課程中,您會使用整合式終端機。
開啟 .vscode/launch.json。
將
console設定變更為integratedTerminal,從:"console": "internalConsole",變更為:
"console": "integratedTerminal",儲存您的變更。
在下一個單元中,您將瞭解如何使用調試程式來修正我們先前看到的 Fibonacci 程式代碼中的 Bug。