在 Visual Studio 中使用 GitHub Copilot 為你的應用程式除錯

在本文中,你將學習如何更有效率地使用 GitHub Copilot 除錯。 Copilot 可以提供程式碼修正,並提供深入分析與程式碼運作說明。 它有助於提出錯誤修正建議,並說明例外狀況等事項。 Copilot 能理解呼叫堆疊、框架、變數名稱和值。 因此,您可以與可感知偵錯工具的 AI 互動,以詢問與程式碼相關的詳細問題,以及一般偵錯問題。

此外,Copilot 對某些特定情境(如例外)以及所有在 AI 強化的除錯情境中描述的情境提供更精確的協助。 在大多數情況下,請尋找Ask CopilotAsk Copilot 按鈕的截圖。Analyze with Copilot 按鈕。 在這些情況下,Copilot 已經知道你問題的上下文。

如需瞭解更多有關 Visual Studio 中 GitHub Copilot 自動完成功能的資訊,請參見Visual Studio 中 GitHub Copilot 自動完成的相關資訊

先決條件

若要開始使用,您需要:

AI 增強型情境

Copilot 能理解呼叫堆疊、框架、變數名稱和值。 因此,您可以與可感知偵錯工具的 AI 互動,以詢問與程式碼相關的詳細問題,以及一般偵錯問題。

此外,Copilot 對某些特定情境(如下表所述)提供更精確的協助。

功能或案例 連結
偵錯代理程式 請參見本文中 使用 Debugger Agent 進行 Agentic 錯誤排除。 端對端代理式工作流程,重現錯誤、為應用程式進行儀器化,並利用即時執行時資料驗證修復。
呼叫堆疊分析 請參考 使用 Copilot 分析呼叫堆疊。 一鍵快速分析你的執行緒運行情況,包括非同步流程的說明。
例外 請參見本文中的 使用 Copilot 偵錯異常情況。 例外狀況的協助還包括死結偵測錯誤的協助。
變數 請參閱 取得 AI 協助
LINQ 查詢分析 在程式碼編輯器中偵錯時,將滑鼠停留在 LINQ 查詢上,以查看傳回值。 選擇用Copilot分析按鈕以獲得 AI 協助。 請參閱 檢視 LINQ 查詢的傳回值
數據提示 請參閱 AI 協助取得數據提示
條件式斷點和追蹤點 請參閱本文中的 ,了解條件斷點與追蹤點建議
快速動作 (燈泡) 請參閱 如何使用 AI 協助進行快速操作
IEnumerable 表格式可視化工具 請參閱 取得 AI 協助
文字視覺化工具中的自動偵測與格式化 請參見 自動偵測與格式化。 Copilot 能自動識別編碼或壓縮的字串,並一鍵解碼。
行內傳回值 請參閱 檢視方法呼叫的傳回值
內嵌值 請參閱 檢視內嵌值
多執行緒偵錯 請參閱 使用 Threads 檢視取得 AI 協助
單元測試 請參閱 取得 AI 協助來偵測測試中的錯誤
使用存放庫內容檢查例外狀況 請查看 提供存放庫上下文的 AI 協助
疑難排解斷點 請參閱 取得 AI 協助
功能或案例 連結
呼叫堆疊分析 請參考 使用 Copilot 分析呼叫堆疊。 一鍵快速分析你的執行緒運行情況,包括非同步流程的說明。
例外 請參見本文中的 使用 Copilot 偵錯異常情況。 例外狀況的協助還包括死結偵測錯誤的協助。
變數 請參閱 取得 AI 協助
LINQ 查詢分析 在程式碼編輯器中偵錯時,將滑鼠停留在 LINQ 查詢上,以查看傳回值。 選擇用Copilot分析按鈕以獲得 AI 協助。 請參閱 檢視 LINQ 查詢的傳回值
數據提示 請參閱 AI 協助取得數據提示
條件式斷點和追蹤點 請參閱本文中的 ,了解條件斷點與追蹤點建議
快速動作 (燈泡) 請參閱 如何使用 AI 協助進行快速操作
IEnumerable 表格式可視化工具 請參閱 取得 AI 協助
行內傳回值 請參閱 檢視方法呼叫的傳回值
內嵌值 請參閱 檢視內嵌值
多執行緒偵錯 請參閱 使用 Threads 檢視取得 AI 協助
單元測試 請參閱 取得 AI 協助來偵測測試中的錯誤
使用存放庫內容檢查例外狀況 請查看 提供存放庫上下文的 AI 協助
疑難排解斷點 請參閱 取得 AI 協助

在大多數情況下,你可以使用 Ask Copilot 按鈕Ask Copilot 按鈕的截圖。Copilot 分析按鈕 來獲得目標協助。 Copilot 已經知道你問題的背景。 例如,它知道目前的呼叫堆疊、您詢問的程式代碼行,以及例外狀況的名稱(如果有發生),因此您不需要自行在聊天中提供內容。 Copilot 也提供條件斷點與痕跡點的使用建議。

使用 Copilot 進行除錯

下列簡單範例示範如何使用內嵌聊天檢視取得 AI 協助。

備註

你也可以選擇 View GitHub Copilot Chat 這個選項,來獲得協助。 更多資訊請參見 什麼是 Visual Studio? 的 GitHub Copilot Chat 擴充功能。

啟動除錯工作階段

  1. 在 Visual Studio 裡,建立一個新的 C# Console 應用程式。

    在 [開始] 視窗中,選擇 建立新專案。 在搜尋框輸入 console,選擇語言 C#,然後選擇 Console App .NET。 選擇 下一步。 輸入專案名稱,例如 ConsoleApp_Copilot,然後選擇下一步

    選擇推薦的目標框架或.NET 10,然後選擇Create

    如果你沒看到 Console App 專案範本.NET,請到 Tools>Get Tools and Features,這會開啟 Visual Studio 安裝程式。 選擇 .NET Desktop Development 工作負載,然後選擇 Modify

    Visual Studio建立主控台專案,該專案出現在右側窗格的 Solution Explorer

  2. Program.cs 中的程式碼取代為下列程式碼:

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
        public static void Main(string[] args)
        {
            int value = Int32.Parse(args[0]);
            List<String> names = null;
            if (value > 0)
                names = new List<String>();
    
            names.Add("Major Major Major");
        }
    }
    
  3. 以滑鼠右鍵按一下以下陳述式,並選擇中斷點>插入中斷點

    int value = Int32.Parse(args[0]);
    
  4. F5,或從偵錯選單中選擇開始偵錯

    應用程式會在中斷點暫停。 自動變數視窗顯示 args 變數的值為 string[0]

    Autos 視窗的螢幕擷取畫面。

  1. 在程式碼中點右鍵,選擇 聊天 即可開啟內嵌聊天視窗。
  1. 在程式碼中右鍵點擊,選擇 Ask Copilot 即可開啟內嵌聊天視窗。

小提示

或者,你也可以在 Autos 或 Locals 視窗,或資料提示中右鍵點擊變數,選擇 Ask Copilot。 這樣 Copilot 就能取得變數名稱和上下文,所以你不需要在聊天中自己提供上下文。

  1. 在內嵌聊天檢視中輸入下列問題:

    Why does the args variable have a value of string[0]?
    

內嵌 Copilot Chat 的截圖。

當你按下 Enter,Copilot 會根據對你程式碼的理解給出答案。 (您得到的回應可能與此處顯示的不同。)

&lт;c0>&lт;sb0>由 Copilot 回答問題的截圖。&lт;/sb0>&lт;/c0>

如果 Copilot 有建議的修正,它會顯示給你看。 如果沒有,你可以向 Copilot 詢問程式碼建議。

小提示

在線上聊天中,使用「#」符號,從下拉選單中選擇將特定資訊交給 Copilot,同時在你的問題中提及。 例如,如果您選取部分程式代碼,然後輸入 #,您可以從 # 下拉式清單選擇該選取範圍。 您也可以使用「#」符號來參考出現在下拉式清單中的 IDE 功能,例如區域視窗。

  1. 在這個範例中,捲動到 Copilot 回答的末尾,並選擇內嵌聊天視窗末尾的後續問題:「程式沒有收到任何參數時,我該如何處理這種情況?」

    Copilot後續問題的螢幕截圖。

    Copilot 會顯示對你的程式碼提出的修正建議。

    Copilot 建議的修復截圖。

    如果你想套用程式碼修正,請選擇 Tab

  2. 選擇 Alt+Delete,讓我們能在下一節繼續學習 Copilot 的其他功能。

內嵌 Copilot Chat 的截圖。

當你按下 Enter,Copilot 會根據對你程式碼的理解給出答案。 (您得到的回應可能與此處顯示的不同。)

Copilot回答問題的截圖。

如果 Copilot 有建議的修正,它會顯示給你看。 如果沒有,你可以向 Copilot 詢問程式碼建議。

小提示

在線上聊天中,使用「#」符號,從下拉選單中選擇將特定資訊交給 Copilot,同時在你的問題中提及。 例如,如果您選取部分程式代碼,然後輸入 #,您可以從 # 下拉式清單選擇該選取範圍。 您也可以使用「#」符號來參考出現在下拉式清單中的 IDE 功能,例如區域視窗。

  1. 在這個範例中,捲動到 Copilot 回答的末尾,並選擇內嵌聊天視窗末尾的後續問題:「程式沒有收到任何參數時,我該如何處理這種情況?」

    Copilot後續問題的螢幕截圖。

    Copilot 會顯示對你的程式碼提出的修正建議。

    Copilot建議修復方案截圖。

    如果您想要套用程式碼修正,請選擇接受

  2. 選擇Cancel,讓我們能在下一節繼續學習 Copilot 的其他功能。

用 Copilot 偵錯異常

下列簡單範例示範如何在遇到例外狀況時取得 AI 協助,以及如何根據 AI 建議的修正快速更新程式碼。

啟動除錯工作階段

  • 使用偵錯工具在相同的範例應用程式中暫停時,按 F11偵錯>進入以執行目前語句。

    發生 IndexOutOfRangeException 且應用程式暫停,顯示例外狀況。

    若要取得 AI 協助來處理例外狀況,請繼續進行下一節。

要求 AI 協助

  1. 當應用程式暫停於例外時,選擇 Analyze with Copilot 按鈕。

    例外中Ask Copilot按鈕的截圖。

    如果還沒開啟,Copilot Chat 視窗會出現,並評估錯誤及其發生原因。 在此範例中,Copilot 會標示建議的程式碼修正、一個複製程式碼的按鈕,以及一個用於程式碼修正的 Preview 按鈕。

    如果你對例外有疑問,可以在 Ask Copilot 文字框裡詢問。

    Copilot Chat視窗預覽按鈕截圖。

  2. 在 Copilot 聊天視窗裡,告訴 Copilot 你希望它能避免錯誤。

  3. 當Copilot在聊天視窗建議修正時,選擇Apply

  4. 檢視建議的修正,選擇 Tab 來套用該程式碼建議。

    Visual Studio 中程式碼預覽的截圖。

  5. 重新啟動調試程式。

    這一次,沒有出現任何例外狀況。 此問題已修正!

  1. 應用程式暫停於例外時,選擇Ask Copilot按鈕。

    例外中Ask Copilot按鈕的截圖。

    如果還沒開啟,Copilot Chat 視窗會出現,並評估錯誤及其發生原因。 在此範例中,Copilot 會標示建議的程式碼修正、一個複製程式碼的按鈕,以及一個用於程式碼修正的 Preview 按鈕。

    如果你對例外有疑問,可以在 Ask Copilot 文字框裡詢問。

  2. 選取預覽按鈕。

    Copilot Chat視窗預覽按鈕截圖。

    Visual Studio 會顯示包含建議修正的程式碼預覽。

  3. 查看建議的修正,並選擇接受以套用程式碼建議。

    Visual Studio 中程式碼預覽的截圖。

  4. 重新啟動調試程式。

    這一次,沒有出現任何例外狀況。 此問題已修正!

使用 Debugger Agent 進行代理錯誤解決

除錯代理程式提供端對端代理式工作流程,能根據真實執行時行為驗證錯誤,而非依賴靜態分析。 這個體驗會帶領你經歷一個完整的代理循環:理解並重現問題、安裝應用程式、找出根本原因,並透過即時執行驗證修正。

你可以從 GitHub 或 Azure DevOps 的議題開始,或用自然語言描述這個錯誤。 除錯代理會將問題映射到你的本地原始碼,並引導你解決問題。 你可以在除錯過程中與代理互動,提供更多輸入、討論理論,或即時優化修正。

要使用偵錯代理程式:

  1. 打開Copilot Chat視窗(View > GitHub Copilot Chat)。
  2. 從聊天視窗左下角的模式下拉選單選擇 「除錯器 」。
  3. 提供 GitHub 或 Azure DevOps 的問題連結,或用自然語言描述這個錯誤。

顯示在 Visual Studio 中的代理選擇器及自訂代理的截圖。

除錯代理程式的運作步驟如下:

  • 情境注入 - 將問題或錯誤描述與你本地的原始碼連結起來。
  • 自主再生 器 - 分析錯誤,若缺少重現步驟,則建立觸發失敗的最小情境。
  • 假設與工具化 - 產生失敗假設,並以追蹤點與條件斷點為應用程式進行工具化,以捕捉執行時狀態。
  • 執行時驗證 - 執行除錯會話並分析即時遙測以找出根本原因。
  • 針對性修正 ——建議在故障點精確修正,而非廣泛重構。
  • 最終人工驗證 ——你要在現場環境中與代理一起重跑該情境並確認修正。

在聊天處於代理模式時,你也可以使用聊天輸入中的 @debugger 來切換至除錯代理。 欲了解更多關於除錯代理及其他內建代理的資訊,請參見 使用內建和自訂代理搭配 GitHub Copilot

使用條件斷點和追蹤點獲取建議

Copilot會針對你的程式碼提供專屬的條件斷點追踪點的建議。

在此範例中,我們會針對條件中斷點顯示 AI 建議。 針對追蹤點,人工智慧的協助會以同樣的方式運作。

  1. 按一下目前的中斷點來移除之,或以滑鼠右鍵按一下並選擇刪除中斷點

  2. 取代下列程式碼:

    names.Add("Major Major Major");
    

    使用下列方法:

    // names.Add("Major Major Major");
    foreach (var item in args)
    {
       names.Add("Name: " + item);
    }
    
  3. names.Add("Name: " + item) 陳述式左側,以滑鼠右鍵按一下邊欄,然後選擇插入條件中斷點

  4. 選擇表達式欄位,Copilot 就會開始處理建議。

    顯示 Copilot 處理條件斷點建議的截圖。

  1. 當建議出現時,請選擇一個,例如 item == "Test"。 編輯建議,讓名稱為 Fred

    Copilot 針對條件斷點的建議截圖。

  1. 出現建議時,請選擇其中一個建議,例如 item == "John"。 編輯建議,讓名稱為 Fred

    Copilot 條件斷點建議的截圖

  1. 若要測試條件運算式:

    1. 在Solution Explorer中右鍵點擊 ConsoleApp_Copilot專案,選擇Properties

    2. 選取偵錯>一般>開啟偵錯啟動設定檔介面

    3. 命令列引數欄位中,在三個不同的明細行上輸入 5 Fred Joe

      輸入專案的命令列引數之螢幕擷取畫面。

    4. 重新啟動調試程式。

    當偵錯工具在中斷點暫停時,請檢查 item 的值,並驗證目前的值為 Fred