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