針對資料斷點錯誤進行疑難解答 (.NET)

本文可協助您解決使用「值變更時中斷」時所發生的常見錯誤。

診斷「無法設定數據斷點」錯誤

重要

.NET Core 3.0、.NET 5.0.3 和更新版本支援 Managed 數據斷點。 您可以在這裡下載最新版本

當您使用Managed數據斷點時,可能會發生下列錯誤。 本文說明這些錯誤發生的原因,並提供可能的解決方案或因應措施來解決這些錯誤。

  • 目標進程所使用的 .NET 版本不支持數據斷點。 數據斷點需要 .NET Core 3.x 或 .NET 5.0.3+,在 x86 或 x64 上執行。

    受控資料中斷點的支援開始於 .NET Core 3.0。 .NET Framework、3.0 下的 .NET Core 版本或 5.0.3 下的 .NET 版本目前不支援。

    解決方案:若要解決此錯誤,請將項目升級至 .NET Core 3.x 或 .NET 5+。

  • 在Managed堆積上找不到值,而且無法追蹤。

    • 在堆疊上宣告的變數。

      不支援為堆疊上建立的變數設定數據斷點,因為這些變數在函式結束時將會無效。

      因應措施:在使用變數的行上設定中斷點。

    • 未從下拉功能表展開的變數上「當值變更時中斷」。

      調試程式在內部需要知道包含您要追蹤之欄位的物件。垃圾收集行程可能會在堆積中移動您的物件,因此調試程式必須知道保留您想要追蹤之變數的物件。

      因應措施:如果您在想要設定數據斷點的物件內的方法,請遵循下列步驟:

      a. 流覽至框架,其中包含您感興趣的物件方法。
      b. 開啟 [局部變數]、[自動變數] 或 [監看] 視窗。
      c. 尋找物件並展開它以顯示其欄位。
      d. 以滑鼠右鍵按下您要設定資料斷點的欄位,然後從操作功能表選取 [當值變更 時中斷]。

  • 靜態欄位或靜態屬性不支援數據斷點。

    目前不支持靜態欄位和屬性。 如果您對此功能感興趣,請提供 意見反應

  • 無法追蹤結構欄位和屬性。

    目前不支持結構的欄位和屬性。 如果您對此功能感興趣,請提供 意見反應

  • 屬性值已變更,且無法再追蹤。

    屬性可能會變更它在運行時間期間計算的方式。 如果發生這種情況,屬性相依的變數數目會增加,而且可能超過硬體限制。 如需詳細資訊,請參閱下列錯誤「屬性相依於硬體可追蹤的記憶體多」 。

  • 屬性相依於記憶體超過硬體可追蹤的記憶體。

    每個架構都有一組位元組和硬體數據斷點,其可支援該斷點,以及您想要設定數據斷點的屬性已超過該限制。 請參閱數據斷點硬體限制數據表,以瞭解您所使用的架構有多少硬體支援的數據斷點和位元組。

    因應措施:在屬性內可能變更的值上設定資料中斷點。

  • 使用舊版 C# 運算式評估工具時,不支持數據斷點。

    只有非舊版 C# 運算式評估工具才支援數據斷點。

    解決方案:若要停用舊版 C# 運算式評估工具,請遵循下列步驟:

    1. 移至 Visual Studio 中的 [ 偵錯] 功能表。
    2. 選取選項
    3. 流覽至 [偵錯>一般]。
    4. 取消核取 [ 使用舊版 C# 和 VB 運算式評估工具 ] 選項。
  • 類別 X 具有自定義調試程序檢視,可封鎖僅對它特定的數據使用數據斷點。

    只有目標進程所建立的記憶體支援數據斷點(已偵錯的應用程式)。 設定數據斷點的記憶體已標示為可能由 DebuggerTypeProxy 屬性所建立的物件所擁有,或不屬於目標進程的其他專案所擁有。

    因應措施:展開 原始檢視 ,而不是 物件的DebuggerTypeProxy 檢視,然後設定數據斷點。 這可確保數據斷點不在 屬性所建立之物件的記憶體上 DebuggerTypeProxy

資料中斷點硬體限制

程序執行所在的架構(平台組態)有有限的硬體數據斷點可用。 下表指出每個架構有多少暫存器可供使用。

架構 硬體支援的數據斷點數目 位元組大小上限
x86 4 4
x64 4 8
ARM 1 4
ARM64 2 8

提供意見反應

如需此功能的任何問題或建議,請透過 [說明>傳送意見>反應] 回報 IDE 或 開發人員社群 中的問題,讓我們知道。

另請參閱