了解 Visual Studio Code 中的 .NET 偵錯工具

已完成

在上一個單元中,您已了解偵錯工具可協助您控制程式執行並觀察其狀態。 在此節中,您將了解如何在 Visual Studio Code 中執行那兩個工作。

讓我們從了解如何設定 Visual Studio Code 偵錯工具以搭配 .NET 使用開始。

針對 .NET 偵錯設定 Visual Studio Code

當您第一次在 Visual Studio Code 中開啟 C# 檔案時,系統將會提示您安裝建議的 C# 延伸模組。

Screenshot of Visual Studio Code prompt to install the C# extension.

Visual Studio Code 將會安裝 C# 延伸模組,而且會顯示額外的提示,以新增必要資產來建置您的專案並對其進行偵錯。

Screenshot of Visual Studio Code prompt to add required assets to build and debug your .NET project.

注意

您可以選擇從 Marketplace 安裝 \(英文\) Visual Studio Code 中的 C# 語言支援。 當您開啟 C# 檔案時,Visual Studio Code 會自動提示您安裝此延伸模組 (如果您尚未這麼做)。 如果您在 Visual Studio Code 中建置 .NET 應用程式或對其進行偵錯時遇到問題,則應該確認您的專案具備必要資產 \(英文\) 可支援 C# 語言。

中斷點

您已在上一單元中已解,偵錯工具可協助您分析並控制程式執行。 當您啟動 Visual Studio Code 偵錯工具時,其會立即開始執行程式碼。 由於程式碼會非常快速地執行,因此,您必須能夠在任何陳述式上暫停程式。 您將使用「中斷點」來執行該動作。

您可以在 Visual Studio Code 中,於要中斷的那一行上按一下行號左側來新增中斷點。 啟用中斷點之後,您應該會看到紅色圓圈。 再次選取紅色圓圈即可移除。

Screenshot of a breakpoint added in the Visual Studio Code editor window.

如果您以滑鼠右鍵按一下來新增中斷點,也可以選擇 [新增條件中斷點]。 這是一種特殊的中斷點,可讓您輸入中斷執行的「條件」。 這種中斷點只有在符合指定條件時才會啟用。 您也可以用滑鼠右鍵按一下現有的中斷點,然後選取 [編輯中斷點] 加以修改。

Screenshot of setting a conditional breakpoint in Visual Studio Code.

Visual Studio Code 偵錯工具概觀

在設定好中斷點並啟動應用程式之後,畫面上會出現新的資訊面板和控制項。

Screenshot of Visual Studio Code debugger overview.

  1. 偵錯工具啟動控制項
  2. 變數狀態
  3. 監看的變數狀態
  4. 目前的呼叫堆疊
  5. 中斷點
  6. 執行控制項
  7. 目前的執行步驟
  8. 偵錯主控台

偵錯工具啟動控制項

您可以在側邊欄的頂端找到啟動控制項:

Screenshot of Visual Studio Code debug sidebar controls.

  1. 開始偵錯。
  2. 選取作用中的啟動設定。
  3. 編輯 launch.json 檔案。 若有需要,請加以建立。
  4. 開啟偵錯終端。

檢視並編輯變數狀態

當您分析程式缺陷的成因時,請監看變數狀態,以尋找非預期的變更。 您可以使用 [變數] 面板來密切注意變數狀態。

變數會依範圍依序顯示:

  • [區域變數] 可在目前範圍中存取,通常為目前函式。
  • [全域變數] 可從程式中任何地方存取。 也會包含 JavaScript 執行階段中的系統物件,因此如果在那裡面看到很多東西,請不要感到驚訝。
  • [結束變數] 可從目前結束 (如果有的話) 存取。 結束會將函式的區域範圍與其所屬外部函式的範圍互相結合。

您可以選取箭號來展開範圍和變數。 在展開物件時,您可以看到在這個物件中定義的所有屬性。

您可以在變數上按兩下,即可快速變更該變數的值。

在編輯器視窗中將滑鼠游標直接暫留在函式參數或變數上,即可查看其值。

Screenshot of variable hover during debugging.

監看變數

每次想要跨時間或在不同函式之間追蹤變數狀態時都必須進行搜尋,可能會相當煩人。 這就是 [監看] 面板能夠派上用場的地方。

您可以選取 [加號] 按鈕,以輸入要監看的變數名稱或運算式。 或者,您也可以用滑鼠右鍵按一下 [變數] 面板中的變數,然後選取 [加入監看]

執行程式碼時,[監看] 面板內的所有運算式都會自動更新。

呼叫堆疊

每次程式輸入函式時,都會在呼叫堆疊中新增一個項目。 當應用程式變得很複雜,而且您有會在函式內多次呼叫的函式時,呼叫堆疊便能表示函式呼叫的軌跡。

這有助於找出例外狀況的來源。 如果程式發生非預期的損毀,您通常會在主控台看到類似下面範例的內容:

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 的 [呼叫堆疊] 面板派上用場的地方。 可篩選掉不必要的資訊,預設只顯示您自己程式碼中的相關函式。 然後,您可以展開此呼叫堆疊,以找出例外狀況的出處。

中斷點面板

在 [中斷點] 面板中,您可以看見並切換您放置在程式碼中的所有中斷點。 您也可以切換選項,在已攔截或未攔截的例外狀況下中斷。 您可以使用 [中斷點] 面板來檢查程式狀態,並在發生錯誤時使用 [呼叫堆疊] 追蹤例外狀況的來源。

控制執行

您可以使用這些控制項來控制程式的執行流程。

Screenshot of Visual Studio Code debugger execution controls.

這些控制項從左至右為:

  • 繼續或暫停執行:如果已暫停執行,則此控制項會繼續執行,直到遇到下一個中斷點為止。 如果程式正在執行,則按鈕會切換至暫停按鈕,以供用來暫停執行。
  • 逐步執行:執行目前內容中的下一個程式碼陳述式。
  • 逐步執行:如同 [逐步執行程序],但如果下一個陳述式是函式呼叫,則移至此函式的第一個程式碼陳述式 (與 step 命令相同)。
  • 跳出:如果您位於函式內,則執行此函式的剩餘程式碼,並跳回初始函式呼叫之後的陳述式 (與 out 命令相同)。
  • 重新啟動:從頭開始執行程式。
  • 停止:結束執行並退出偵錯工具。

使用偵錯主控台

您可以針對 Windows 與 Linux 選取 Ctrl+Shift+Y 來顯示或隱藏偵錯主控台。 在 Mac 中,則選取 Cmd+Shift+Y。 您可以使用偵錯主控台將應用程式主控台記錄視覺化。 其也可以用來評估目前執行內容中的運算式或執行程式碼,如同內建 .NET 偵錯工具中的命令或變數名稱。

您可在偵錯主控台底部的輸入欄位中輸入 .NET 運算式,然後選取 Enter 來加以評估。 結果會直接顯示在主控台中。

Screenshot of Visual Studio Code debug console.

透過使用偵錯主控台,您就可以快速檢查變數值、以不同的值測試函式,或改變目前的狀態。

注意

雖然偵錯主控台對於執行及評估 .NET 程式碼非常有用,但當您嘗試執行 .NET 主控台應用程式或對其進行偵錯時,由於偵錯控制台不接受執行中程式的終端輸入,因此可能會有些混亂。

若要在偵錯時處理終端輸入,您可以使用整合式終端 (其中一個 Visual Studio Code 視窗) 或外部終端。 針對此教學課程,您會使用整合式終端。

  1. 開啟 .vscode/launch.json

  2. console 設定變更為 integratedTerminal,從:

    "console": "internalConsole",
    

    變更為:

    "console": "integratedTerminal",
    
  3. 儲存您的變更。

在下一個單元中,您將了解如何使用偵錯工具,來修正我們先前所看見之 Fibonacci 程式碼中的錯誤 (Bug)。