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

已完成

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

讓我們從瞭解如何設定 Visual Studio Code 調試程式以搭配 .NET 使用它開始。

針對 .NET 偵錯設定 Visual Studio Code

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

安裝 C# 延伸模組之 Visual Studio Code 提示的螢幕擷取畫面。

Visual Studio Code 會安裝 C# 擴充功能,並顯示額外的提示,以新增必要的資產來建置和偵錯您的專案。

新增必要資產來建置您的 .NET 專案並對其進行偵錯之 Visual Studio Code 提示的螢幕擷取畫面。

備註

Visual Studio Code 中的 C# 語言支援是可以在 Marketplace 安裝的選擇性功能。 如果您尚未開啟 C# 檔案,Visual Studio Code 會自動提示您安裝此延伸模組。 如果您在 Visual Studio Code 中建置或偵錯 .NET 應用程式時遇到問題,您應該 確認專案具有 C# 語言支援所需的資產。

中斷點

您已在上一單元中已解,偵錯工具可協助您分析並控制程式執行。 當您啟動 Visual Studio Code 調試程式時,它會立即開始執行您的程式代碼。 由於程式碼快速執行,您必須能夠在任何陳述式上暫停程式。 您將使用「中斷點」來這樣做。

您可以在 Visual Studio Code 中新增斷點,方法是點擊您要中斷的行號左邊。 啟用中斷點之後,您應該會看到紅色圓圈。 再次選取紅色圓圈即可移除。

Visual Studio Code 編輯器視窗中已新增中斷點的螢幕擷取畫面。

如果您以滑鼠右鍵按下以新增斷點,您也可以選取 [ 新增條件式斷點]。 這種特殊的斷點允許您輸入一個用於停止執行的條件。 只有在符合指定條件時,這個斷點才會作用中。 您也可以在現有斷點上按下滑鼠右鍵,然後選取 [ 編輯斷點] 來修改現有的斷點。

在 Visual Studio Code 中設定條件斷點的螢幕快照。

Visual Studio Code 調試程式概觀

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

Visual Studio Code 調試程式概觀的螢幕快照。

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

偵錯工具啟動控制項

在提要欄位頂端,您可以找到啟動控制項:

Visual Studio Code 調試側邊欄控制項的螢幕快照。

  1. 開始偵錯。
  2. 選取有效的啟動組態。
  3. 編輯 launch.json 檔案。 若有需要,請加以建立。
  4. 開啟偵錯終端機。

檢視和編輯變數狀態

當您分析程式缺陷的原因時,請監看變數狀態以尋找非預期的變更。 您可以使用 [ 變數 ] 面板來執行此動作。

您的變數會按範圍顯示:

  • 局部變數:可在目前範圍中存取,通常是目前的函式。
  • 全域變數:可從程式中的每個位置存取。 也包含來自 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 呼叫堆疊 面板派上用場的地方。 可篩選掉不必要的資訊,預設只顯示您自己程式碼中的相關函式。 然後,您可以展開此呼叫堆疊,以找出例外狀況的出處。

中斷點面板

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

控制執行

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

Visual Studio Code 調試程式執行控件的螢幕快照。

從左至右,控件為:

  • 繼續或暫停執行:如果暫停執行,它會繼續執行,直到遇到下一個斷點為止。 如果程式正在執行,此按鈕會切換為暫停按鈕,可用來暫停執行。
  • 不進入函式:執行目前內容中的下一個程式碼陳述式。
  • Step into:與 Step over 類似,但如果下一行是函式呼叫,則移至此函式的第一個程式碼語句(與 step 命令相同)。
  • 步出:如果您在函式內,請執行此函式的剩餘程式碼,然後跳回到初始函式呼叫後的語句(與 out 命令相同)。
  • 重新啟動:從頭開始重新啟動程式。
  • 停止:結束執行並結束調試程式。

使用偵錯主控台

您可以選取適用於 Windows 和 Linux 的 Ctrl+Shift+Y 來顯示或隱藏偵錯控制台。 選擇 Cmd+Shift+Y 適用於 Mac。 您可以使用偵錯主控台將應用程式控制台記錄視覺化。 您也可以使用它來評估表達式,或在目前的執行內容中執行程序代碼,例如內建 .NET 調試程式中的命令或變數名稱。

您可以在偵錯控制台底部的輸入字段中輸入 .NET 表達式,然後選取 Enter 來評估它。 結果會直接顯示在控制台中。

Visual Studio Code 偵錯控制台的螢幕快照。

藉由使用偵錯控制台,您可以快速檢查變數值、測試具有不同值的函式,或改變目前狀態。

備註

雖然偵錯控制台對於執行和評估 .NET 程式代碼非常有用,但當您嘗試執行或偵錯 .NET 控制台應用程式時,可能會有點混淆,因為偵錯控制台不接受執行中程式的終端輸入。

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

  1. 開啟 .vscode/launch.json

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

    "console": "internalConsole",
    

    變更為:

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

在下一個單元中,您將瞭解如何使用調試程式來修正我們先前看到的 Fibonacci 程式代碼中的 Bug。