處理異常是一個常見問題,無論您的技術或專業水平如何。 弄清楚為什麼異常會導致程式碼出現問題可能是一次令人沮喪的經歷。 當您在 Visual Studio 除錯異常時,我們希望透過提供相關的例外資訊,幫助您更快除錯問題,減輕您的挫折感。
暫停於例外發生時
當偵錯工具在例外狀況時中斷時,該程式碼行的右側會出現例外狀況錯誤圖示。 非模態的例外狀況輔助工具會出現在例外狀況圖示附近。
檢查例外狀況資訊
您可以立即讀取例外狀況協助程式中的例外狀況類型和例外狀況訊息,以及例外狀況是否擲回或未處理。 您可以按一下「 檢視詳細資料」 連結,以檢查及檢視例外狀況物件的屬性。
分析空值參考
自 Visual Studio 2017 起,無論是 .NET 或 C/C++ 程式碼,當您遇到 NullReferenceException 或 AccessViolation 時,在例外輔助工具中會看到空值分析資訊。 分析會顯示為例外狀況訊息下方的文字。 在下圖中,資訊顯示為「s was null」。
備註
在受管理程式碼中進行零參考分析需要 .NET 版本 4.6.2。 目前不支援 Universal Windows Platform (UWP) 及其他 .NET Core 應用程式的 Null 分析。 它只有在偵錯沒有任何 Just-In-Time (JIT) 程式碼最佳化的程式碼時才可用。
設定例外狀況設定
您可以在例外狀況協助程式的 例外狀況設定 區段中,將偵錯工具設定為在擲回目前類型的例外狀況時中斷。 如果偵錯工具在擲回例外狀況時暫停,則您可以使用複選框在未來擲回例外狀況時停用該例外狀況類型的中斷。 如果您不想在此特定模組中拋出此特定異常時中斷此特定異常,請勾選「異常設定」視窗中「拋出時除外:」下的模組名稱旁的複選框。
檢查內部例外狀況
如果例外狀況有任何內部例外狀況 (InnerException,您可以在例外狀況協助程式中檢視它們。 如果存在多個例外狀況,您可以使用呼叫堆疊上方顯示的向左和向右箭頭在它們之間導航。
檢查重新擲回的例外狀況
如果出現例外狀況 thrown ,例外狀況協助程式會顯示第一次擲回例外狀況時的呼叫堆疊。 如果多次擲回例外狀況,則只會顯示原始例外狀況的呼叫堆疊。
檢查非同步例外(.NET)
從 .NET 9 開始,當非同步任務方法在 .NET 框架程式碼中拋出例外時,Visual Studio 除錯器會自動中斷。 這使得除錯非同步程式碼變得更容易,尤其是在 ASP.NET 中,因為例外常跨越非同步邊界拋出。
檢視呼叫堆疊
從 Visual Studio 2022 版本 17.3 開始,你可以在呼叫堆疊視窗中查看例外堆疊框架。 對於非同步例外狀況,這會增加快速載入符號或尋找來源並直接移至例外狀況網站的能力。 [呼叫堆疊] 視窗內的例外狀況堆疊框架提供標準呼叫堆疊功能,例如自動導覽、在框架之間快速來回切換、符號載入和反編譯選項,以回到擲回例外狀況的原始程式碼。
取得 AI 協助
如果你有 Copilot,可以在除錯異常時獲得 AI 協助。 請尋找 用 Copilot 分析 或 詢問 Copilot 按鈕。
在這些情況下,Copilot 已經知道你問題的上下文,所以你不需要在聊天中自己提供上下文。 更多資訊請參見 Debug with Copilot。
如果 Copilot 想要存取輸出視窗的上下文來協助分析問題,它會在聊天視窗中提示你取得這個權限。 如果您授予權限,您將使 Copilot 能根據執行時細節對例外進行進一步分析。 例外輔助器、變數分析、程式碼檢查及其他除錯情境可存取當前除錯會話的上下文。
取得 AI 協助分析存放庫內容
當你在 Visual Studio 裡使用 Azure DevOps 倉庫時,使用 Copilot 進行例外分析,會整合倉庫上下文,以實現更聰明、更快且更精確的例外解析。 Copilot 會交叉參照你開放的儲存庫,包括過去的錯誤、問題、pull request 和歷史修復,提供直接與你的程式碼庫相關的可行洞見。
當您遇到異常時:
- Copilot 能辨識最可能的根本原因、受影響的元件及潛在的修復方法。
- Copilot 利用資料庫知識來突顯類似的過去問題及其解決方案,幫助你從現有修正中學習。
- 複雜的例外狀況會以完整內容進行分析,將執行階段行為與歷程模式連結起來,因此您可以快速瞭解意外或不正確的值。
- 透過自動呈現相關的修正與洞察,Copilot 節省時間,減少除錯困難問題所需的反覆嘗試。
對於無法僅透過單一例外來診斷的複雜錯誤,可以使用 Debugger Agent 進行端對端診斷。 除錯代理提供一個代理式工作流程,利用即時執行時資料重現、監控並驗證修復。 欲了解更多資訊,請參閱 使用除錯代理進行代理性錯誤解決。
使用 Live Share 分享偵錯工作階段
從例外狀況協助程式中,您可以使用 [啟動 Live Share 工作階段...] 連結來啟動 Live Share 工作階段。加入 Live Share 會話的任何人都可以看到例外狀況協助程式以及任何其他偵錯資訊。