Share via


針對 Visual Studio 調試程式中的斷點進行疑難解答

適用於: Visualstudio

斷點警告

偵錯時, 斷點 有兩個可能的視覺狀態:

  • 如果調試程式成功在目標進程中設定斷點,則為實心紅色圓圈。
  • 空心 (白色填滿) 圓圈,可能是斷點已停用,或在嘗試設定斷點時發生警告。

若要判斷差異,請將滑鼠停留在斷點上方,並查看是否有警告。 下列兩節說明重要的警告,以及如何修正這些警告。

「尚未載入此文件的符號」

在偵錯時移至 [模組] 視窗 (> 偵錯Windows>模組) ,並檢查模組是否已載入。

  • 如果您的模組已載入,請檢查 [符號狀態 ] 資料行,以查看是否已載入符號。
    • 如果未載入符號,請檢查符號狀態以診斷問題。 從 模組視窗中 模組的操作功能表中,選取 [符號載入資訊... ],以查看調試程式嘗試載入符號的位置。 如需載入符號的詳細資訊,請參閱 指定符號 (.pdb) 和原始程序檔
    • 如果載入符號,PDB 就不會包含來源檔案的相關信息。 一些可能的原因如下:
      • 如果您的原始程式檔是最近新增的,請確認正在載入模組的最新版本。
      • 您可以使用 /PDBSTRIPPED 連結器選項來建立已移除的 PDB。 已移除的 PDB 不包含原始程式檔資訊。 確認您正在使用完整的 PDB,而不是已移除的 PDB。
      • PDB 檔案已部分損毀。 刪除檔案並執行模組的全新組建,以嘗試解決問題。
  • 如果您的模組未載入,請檢查下列專案以找出原因:
    • 確認您正在偵錯正確的程式。
    • 請檢查您正在偵錯正確的程序代碼。 您可以在 [處理程式] 視窗中找出調試程式設定要偵錯的程式代碼類型, (>錯Windows>進程) 。 例如,如果您嘗試對 C# 程式代碼進行偵錯,請確認您的調試程式已針對適當的 .NET (類型和版本進行設定,例如 Managed (v4*) 與 Managed (v2*/v3*) 與 Managed (CoreCLR) ) 。

"… 目前的原始碼與內建的版本不同...」

如果原始程式檔已變更,且來源不再符合您要偵錯的程式代碼,則調試程序預設不會在程式代碼中設定斷點。 一般而言,當原始程式檔變更,但未重建原始程式碼時,就會發生此問題。 若要修正此問題,請重建專案。 如果建置系統認為項目已經是最新狀態,即使不是,您可以強制項目系統重建。 重新儲存原始程序檔,或在建置之前先清除組建輸出,以重建專案。

在罕見的情況下,您可能想要在沒有相符原始程式碼的情況下進行偵錯。 在沒有相符源代碼的情況下進行偵錯可能會導致令人混淆的偵錯體驗,因此請確定您想要如何繼續。

請遵循其中一個選項來停用這些安全性檢查:

  • 若要修改單一斷點,請將滑鼠停留在編輯器中的斷點圖示上,然後選取設定 (齒輪) 圖示。 預覽視窗會新增至編輯器。 在預覽視窗頂端有一個超連結,指出斷點的位置。 選取超連結以允許修改斷點位置,然後核取 [ 允許原始程式碼與原始程式碼不同]
  • 若要針對所有斷點修改此設定,請移至 [ 偵錯>選項和設定]。 在 [ 偵錯/一般 ] 頁面上,清除 [ 需要完全符合原始版本的原始程序檔 ] 選項。 當您完成偵錯時,請務必重新啟用此選項。

已成功設定斷點 (沒有警告) ,但未叫用

本節提供資訊來針對調試程式未顯示任何警告時的問題進行疑難解答 – 斷點在主動偵錯時是實心紅色圓圈,但不會叫用斷點。

以下是一些要檢查的專案:

  1. 如果您的程式代碼是在多個進程或多部計算機中執行,請確定您正在偵錯正確的進程或計算機。
  2. 確認您的程式代碼正在執行。 若 (要 System.Diagnostics.Debugger.Break 測試您的程式代碼是否正在執行,請將 C#/VB) 或 __debugbreak (C++) 的呼叫新增至您嘗試設定斷點的程式代碼行,然後重建專案。
  3. 如果您要對優化程式代碼進行偵錯,請確定設定斷點的函式未內嵌到另一個函式。 Debugger.Break上一個檢查中所述的測試也可以用來測試此問題。
  4. 針對附加至進程案例,請確定您正在偵錯正確的程式代碼類型 (例如,腳本程式代碼與 .NET Framework 與 .NET 5+) 。 若要調查,請核取 [ 附加至 進程] 對話方塊中的 [附加至] 選項,然後視需要選擇 [選取] 以變更程式代碼類型。

我已刪除斷點,但當我再次開始偵錯時,仍會繼續叫用它

如果您在偵錯時刪除斷點,您可能會在下次開始偵錯時再次叫用斷點。 若要停止點擊此斷點,請確定斷點的所有實例都已從 [ 斷點 ] 視窗中移除。