針對 Visual Studio 偵錯工具中的中斷點進行疑難排解
適用於: Visual Studio
斷點警告
偵錯時,斷點有兩個可能的視覺狀態:
- 如果偵錯工具在目標處理序中成功設定中斷點,則為紅色實心圓。
- 如果斷點已停用,或嘗試設定斷點時發生警告,空心圓圈(根據您的主題而定),則為空心圓圈。
若要判斷差異,請將滑鼠暫留在中斷點上並查看是否有警告。 下列兩節說明顯著的警告,以及如何修正這些警告。
「未載入此文件的符號」
在偵錯時流覽至 [>偵錯 Windows>模組],並檢查模組是否已載入。
- 如果您的模組已載入,請檢查 [符號狀態] 資料行,以查看是否已載入符號。
如果未載入符號,請檢查符號狀態以診斷問題:
在 [ 模組] 視窗中,以滑鼠右鍵按兩下尚未載入符號的模組,然後選取 [ 符號載入資訊...]。
如需載入符號的詳細資訊,請參閱指定符號 (.pdb) 和來源檔案。
如果載入符號,PDB 不包含來源檔案的相關資訊。 一些可能的原因如下:
- 如果最近新增了來源檔案,請確認正在載入模組的最新版本。
- 您可以使用 /PDBSTRIPPED 連結器選項來建立去除的 PDB。 去除的 PDB 不包含來源檔案資訊。 確認您使用的是完整的 PDB,而不是去除的 PDB。
- PDB 檔案已部分損毀。 刪除該檔案並執行模組的全新組建,以嘗試解決問題。
- 如果您的模組未載入,請檢查下列專案以找出原因:
- 確認您正在偵錯正確的處理序。
- 請檢查您是否正在偵錯正確的程式碼。 您可以在 [處理序] 視窗 ([偵錯]>[Windows]>[處理序]) 中,找出偵錯工具設定為偵錯的程式碼類型。 例如,如果您嘗試偵錯 C# 程式碼,請確認您的偵錯工具已針對適當的 .NET 類型和版本進行設定 (例如 Managed (v4*) 與 Managed (v2*/v3*) 與 Managed (CoreCLR))。
"… 目前的原始碼與內建的版本不同...
如果來源檔案已變更,而且來源不再符合您要偵錯的程式代碼,則調試程序預設不會在程式代碼中設定斷點。 一般而言,當來源檔案變更但未重建原始程式碼時,就會發生此問題。 若要修正此問題,請重建該專案。 如果建置系統認為專案已經是最新的,即使專案不是最新的,您也可以強制重建專案系統。 請再次儲存來源檔案,或在建置之前清除建置輸出,以重建專案。
在極少數案例中,您可能想要在沒有相符原始程式碼的情況下進行偵錯。 在沒有相符原始程式碼的情況下進行偵錯可能會導致令人困惑的偵錯體驗,因此請確定您想要繼續的方式。
請遵循其中一個選項來停用這些安全檢查:
- 若要修改單一中斷點,請將滑鼠暫留在編輯器中的中斷點圖示上,然後選取設定 (齒輪) 圖示。 查看視窗會新增至編輯器。 在查看視窗頂端,有一個超連結表示中斷點的位置。 選取超連結以允許修改中斷點位置,並核取 [允許原始程式碼與原始版本不同]。
- 若要修改所有中斷點的這項設定,請移至 [偵錯]>[選項和設定]。 在 [偵錯] / [一般] 頁面上,清除 [原始程式檔必須完全符合原始版本] 選項。 請確保在完成偵錯時重新啟用此選項。
已成功設定斷點(沒有警告),但未命中
本節提供在調試程式未顯示任何警告時針對問題進行疑難解答的資訊 – 斷點在主動偵錯時是純紅色圓圈,但未叫用斷點。
請檢查下列事項:
- 如果您的程式碼在多個處理序或多部電腦上執行,請確定您正在偵錯正確的處理序或電腦。
- 確認您的程式碼正在執行。 若要測試程式碼是否正在執行,請將
System.Diagnostics.Debugger.Break
(C#/VB) 或__debugbreak
(C++) 的呼叫新增至您嘗試設定中斷點的程式碼,然後重建您的專案。 - 如果您要對最佳化程式碼進行偵錯,請確定已設定中斷點的函式未內嵌到另一個函式中。 先前檢查中所述的
Debugger.Break
測試也可用來測試此問題。 - 若要 附加至處理 案例,請確定您正在偵錯正確的程式代碼類型(例如,腳本程序代碼與 .NET Framework 與 .NET 5+)。 若要調查,請檢查 [附加至處理序] 對話方塊中的 [附加至] 選項,並視需要選擇 [選取],以變更程式碼類型。
我刪除了中斷點,但再次啟動偵錯時繼續叫用此中斷點
如果您在偵錯時刪除了中斷點,則會在下次啟動偵錯時再次叫用此中斷點。 若要停止叫用此中斷點,請確定所有中斷點的執行個體都已從 [中斷點] 視窗中移除。