在本文中,你將學習如何更有效率地使用 GitHub Copilot 除錯。 Copilot 可以提供程式碼修正,並提供深入分析與程式碼運作說明。 它有助於提出錯誤修正建議,並說明例外狀況等事項。 Copilot 能理解呼叫堆疊、框架、變數名稱和值。 因此,您可以與可感知偵錯工具的 AI 互動,以詢問與程式碼相關的詳細問題,以及一般偵錯問題。
此外,Copilot 對某些特定情境(如例外)以及所有在 AI 強化的除錯情境中描述的情境提供更精確的協助。 在大多數情況下,請尋找Ask Copilot
或Analyze with Copilot 按鈕。 在這些情況下,Copilot 已經知道你問題的上下文。
如需瞭解更多有關 Visual Studio 中 GitHub Copilot 自動完成功能的資訊,請參見Visual Studio 中 GitHub Copilot 自動完成的相關資訊。
先決條件
若要開始使用,您需要:
Visual Studio 2022 版本 17.8 或更新版本
使用GitHub帳號登入到Visual Studio並取得Copilot的存取權限。
** 你可以免費使用 GitHub Copilot。 註冊並利用 AI 以更快且更有效率地撰寫程式代碼。備註
如果您安裝擴充功能後遇到認證問題,請參閱 使用 GitHub Copilot Chat 疑難排解認證問題。
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 按鈕
或 Copilot 分析按鈕 來獲得目標協助。 Copilot 已經知道你問題的背景。 例如,它知道目前的呼叫堆疊、您詢問的程式代碼行,以及例外狀況的名稱(如果有發生),因此您不需要自行在聊天中提供內容。 Copilot 也提供條件斷點與痕跡點的使用建議。
使用 Copilot 進行除錯
下列簡單範例示範如何使用內嵌聊天檢視取得 AI 協助。
備註
你也可以選擇
啟動除錯工作階段
在 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。
將 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"); } }以滑鼠右鍵按一下以下陳述式,並選擇中斷點>插入中斷點。
int value = Int32.Parse(args[0]);按 F5,或從偵錯選單中選擇開始偵錯。
應用程式會在中斷點暫停。 自動變數視窗顯示 args 變數的值為
string[0]。
- 在程式碼中點右鍵,選擇 聊天 即可開啟內嵌聊天視窗。
- 在程式碼中右鍵點擊,選擇 Ask Copilot 即可開啟內嵌聊天視窗。
小提示
或者,你也可以在 Autos 或 Locals 視窗,或資料提示中右鍵點擊變數,選擇 Ask Copilot。 這樣 Copilot 就能取得變數名稱和上下文,所以你不需要在聊天中自己提供上下文。
在內嵌聊天檢視中輸入下列問題:
Why does the args variable have a value of string[0]?
當你按下 Enter,Copilot 會根據對你程式碼的理解給出答案。 (您得到的回應可能與此處顯示的不同。)
&lт;c0>&lт;sb0>由 Copilot 回答問題的截圖。&lт;/sb0>&lт;/c0>
如果 Copilot 有建議的修正,它會顯示給你看。 如果沒有,你可以向 Copilot 詢問程式碼建議。
小提示
在線上聊天中,使用「#」符號,從下拉選單中選擇將特定資訊交給 Copilot,同時在你的問題中提及。 例如,如果您選取部分程式代碼,然後輸入 #,您可以從 # 下拉式清單選擇該選取範圍。 您也可以使用「#」符號來參考出現在下拉式清單中的 IDE 功能,例如區域視窗。
在這個範例中,捲動到 Copilot 回答的末尾,並選擇內嵌聊天視窗末尾的後續問題:「程式沒有收到任何參數時,我該如何處理這種情況?」
Copilot 會顯示對你的程式碼提出的修正建議。
如果你想套用程式碼修正,請選擇 Tab。
選擇 Alt+Delete,讓我們能在下一節繼續學習 Copilot 的其他功能。
當你按下 Enter,Copilot 會根據對你程式碼的理解給出答案。 (您得到的回應可能與此處顯示的不同。)
如果 Copilot 有建議的修正,它會顯示給你看。 如果沒有,你可以向 Copilot 詢問程式碼建議。
小提示
在線上聊天中,使用「#」符號,從下拉選單中選擇將特定資訊交給 Copilot,同時在你的問題中提及。 例如,如果您選取部分程式代碼,然後輸入 #,您可以從 # 下拉式清單選擇該選取範圍。 您也可以使用「#」符號來參考出現在下拉式清單中的 IDE 功能,例如區域視窗。
在這個範例中,捲動到 Copilot 回答的末尾,並選擇內嵌聊天視窗末尾的後續問題:「程式沒有收到任何參數時,我該如何處理這種情況?」
Copilot 會顯示對你的程式碼提出的修正建議。
如果您想要套用程式碼修正,請選擇接受。
選擇Cancel,讓我們能在下一節繼續學習 Copilot 的其他功能。
用 Copilot 偵錯異常
下列簡單範例示範如何在遇到例外狀況時取得 AI 協助,以及如何根據 AI 建議的修正快速更新程式碼。
啟動除錯工作階段
使用偵錯工具在相同的範例應用程式中暫停時,按 F11 或偵錯>進入以執行目前語句。
發生
IndexOutOfRangeException且應用程式暫停,顯示例外狀況。若要取得 AI 協助來處理例外狀況,請繼續進行下一節。
要求 AI 協助
當應用程式暫停於例外時,選擇 Analyze with Copilot 按鈕。
如果還沒開啟,Copilot Chat 視窗會出現,並評估錯誤及其發生原因。 在此範例中,Copilot 會標示建議的程式碼修正、一個複製程式碼的按鈕,以及一個用於程式碼修正的 Preview 按鈕。
如果你對例外有疑問,可以在 Ask Copilot 文字框裡詢問。
在 Copilot 聊天視窗裡,告訴 Copilot 你希望它能避免錯誤。
當Copilot在聊天視窗建議修正時,選擇Apply。
檢視建議的修正,選擇 Tab 來套用該程式碼建議。
重新啟動調試程式。
這一次,沒有出現任何例外狀況。 此問題已修正!
使用 Debugger Agent 進行代理錯誤解決
除錯代理程式提供端對端代理式工作流程,能根據真實執行時行為驗證錯誤,而非依賴靜態分析。 這個體驗會帶領你經歷一個完整的代理循環:理解並重現問題、安裝應用程式、找出根本原因,並透過即時執行驗證修正。
你可以從 GitHub 或 Azure DevOps 的議題開始,或用自然語言描述這個錯誤。 除錯代理會將問題映射到你的本地原始碼,並引導你解決問題。 你可以在除錯過程中與代理互動,提供更多輸入、討論理論,或即時優化修正。
要使用偵錯代理程式:
- 打開Copilot Chat視窗(View > GitHub Copilot Chat)。
- 從聊天視窗左下角的模式下拉選單選擇 「除錯器 」。
- 提供 GitHub 或 Azure DevOps 的問題連結,或用自然語言描述這個錯誤。
除錯代理程式的運作步驟如下:
- 情境注入 - 將問題或錯誤描述與你本地的原始碼連結起來。
- 自主再生 器 - 分析錯誤,若缺少重現步驟,則建立觸發失敗的最小情境。
- 假設與工具化 - 產生失敗假設,並以追蹤點與條件斷點為應用程式進行工具化,以捕捉執行時狀態。
- 執行時驗證 - 執行除錯會話並分析即時遙測以找出根本原因。
- 針對性修正 ——建議在故障點精確修正,而非廣泛重構。
- 最終人工驗證 ——你要在現場環境中與代理一起重跑該情境並確認修正。
在聊天處於代理模式時,你也可以使用聊天輸入中的 @debugger 來切換至除錯代理。 欲了解更多關於除錯代理及其他內建代理的資訊,請參見 使用內建和自訂代理搭配 GitHub Copilot。
使用條件斷點和追蹤點獲取建議
Copilot會針對你的程式碼提供專屬的條件斷點和追踪點的建議。
在此範例中,我們會針對條件中斷點顯示 AI 建議。 針對追蹤點,人工智慧的協助會以同樣的方式運作。
按一下目前的中斷點來移除之,或以滑鼠右鍵按一下並選擇刪除中斷點。
取代下列程式碼:
names.Add("Major Major Major");使用下列方法:
// names.Add("Major Major Major"); foreach (var item in args) { names.Add("Name: " + item); }在
names.Add("Name: " + item)陳述式左側,以滑鼠右鍵按一下邊欄,然後選擇插入條件中斷點。選擇表達式欄位,Copilot 就會開始處理建議。
當建議出現時,請選擇一個,例如
item == "Test"。 編輯建議,讓名稱為Fred。
出現建議時,請選擇其中一個建議,例如
item == "John"。 編輯建議,讓名稱為Fred。
若要測試條件運算式:
在Solution Explorer中右鍵點擊
ConsoleApp_Copilot 專案,選擇 Properties 。選取偵錯>一般>開啟偵錯啟動設定檔介面。
在命令列引數欄位中,在三個不同的明細行上輸入
5 Fred Joe。
重新啟動調試程式。
當偵錯工具在中斷點暫停時,請檢查
item的值,並驗證目前的值為Fred。