次の方法で共有


データ ブレークポイント エラーのトラブルシューティング (.NET)

この記事は、"値の変更時に中断" を使用するときに発生する一般的なエラーを解決するのに役立ちます。

"データ ブレークポイントを設定できません" エラーを診断する

重要

マネージド データ ブレークポイントは、.NET Core 3.0、.NET 5.0.3 以降のバージョンでサポートされています。 最新バージョンは こちらからダウンロードできます。

マネージド データ ブレークポイントを使用すると、次のエラーが発生する可能性があります。 この記事では、これらのエラーが発生する理由と、それらを解決するための考えられる解決策または回避策について説明します。

  • ターゲット プロセスで使用される .NET のバージョンでは、データ ブレークポイントはサポートされていません。 データ ブレークポイントには、x86 または x64 で実行されている .NET Core 3.x または .NET 5.0.3 以降が必要です。

    マネージド データ ブレークポイントがサポートされるのは .NET Core 3.0 以降です。 現在、.NET Framework、3.0 より下の .NET Core のバージョン、または 5.0.3 より下の .NET のバージョンではサポートされていません。

    解決策: このエラーを解決するには、プロジェクトを .NET Core 3.x または .NET 5 以降にアップグレードします。

  • この値はマネージド ヒープで見つかり、追跡できません。

    • スタックで宣言された変数。

      スタック上に作成された変数のデータ ブレークポイントの設定はサポートされていません。関数が終了すると、これらの変数は無効になります。

      対応策: 変数が使用されている行にブレークポイントを設定します。

    • ドロップダウン メニューから展開されていない変数の "値が変更されたときに中断" します。

      デバッガーは、追跡するフィールドを含むオブジェクトを内部的に認識している必要があります。ガベージ コレクターはオブジェクトをヒープ内で移動する可能性があるため、デバッガーは追跡する変数を保持するオブジェクトを認識する必要があります。

      回避策: データ ブレークポイントを設定するオブジェクト内のメソッドを使用している場合は、次の手順に従います。

      a. 目的のオブジェクトのメソッドを含むフレームに移動します。
      b. LocalsAutos、または Watch ウィンドウを開きます。
      c. オブジェクトを見つけて展開し、フィールドを表示します。
      d. データ ブレークポイントを設定するフィールドを右クリックし、コンテキスト メニューから [ Break when value changes を選択します。

  • データ ブレークポイントは、静的フィールドまたは静的プロパティではサポートされていません。

    現時点では、静的フィールドとプロパティはサポートされていません。 この機能に関心がある場合は、 feedbackを指定します。

  • 構造体のフィールドとプロパティは追跡できません。

    現時点では、構造体のフィールドとプロパティはサポートされていません。 この機能に関心がある場合は、 feedbackを指定します。

  • プロパティ値が変更され、追跡できなくなります。

    プロパティによって、実行時の計算方法が変更される場合があります。 この場合、プロパティが依存する変数の数が増え、ハードウェアの制限を超える可能性があります。 詳細については、次のエラーを参照してください"プロパティは、ハードウェアで追跡できるよりも多くのメモリに依存しています。

  • このプロパティは、ハードウェアで追跡できるメモリよりも多くのメモリに依存します。

    各アーキテクチャには、サポートできるバイト数とハードウェア データ ブレークポイントが設定されており、データ ブレークポイントを設定するプロパティがその制限を超えています。 使用しているアーキテクチャで使用できるハードウェアでサポートされるデータ ブレークポイントとバイトの数については、 Data ブレークポイントのハードウェア制限 表を参照してください。

    対応策: プロパティ内で変化する可能性のある値にデータ ブレークポイントを設定します。

  • 従来の C# 式エバリュエーターを使用する場合、データ ブレークポイントはサポートされません。

    データ ブレークポイントは、レガシ以外の C# 式エバリュエーターでのみサポートされます。

    解決策: 従来の C# 式エバリュエーターを無効にするには、次の手順に従います。

    1. Visual Studio の Debug メニューに移動します。
    2. オプションを選択します。
    3. Debugging>General に移動します。
    4. 従来の C# および VB 式エバリュエーターを使用する オプションをオフにします。
  • クラス X には、それに固有のデータに対するデータ ブレークポイントの使用をブロックするカスタム デバッガー ビューがあります。

    データ ブレークポイントは、ターゲット プロセス (デバッグ対象のアプリケーション) によって作成されたメモリでのみサポートされます。 データ ブレークポイントが設定されているメモリには、 DebuggerTypeProxy 属性によって作成されたオブジェクトまたはターゲット プロセスに含まれていない他のオブジェクトが所有している可能性があるフラグが設定されています。

    回避策: オブジェクトの DebuggerTypeProxy ビューの代わりに Raw ビューを展開し、データ ブレークポイントを設定します。 これにより、データ ブレークポイントが、 DebuggerTypeProxy 属性によって作成されたオブジェクトが所有するメモリ上にないことを保証します。

データ ブレークポイントのハードウェア制限

プログラムが実行されるアーキテクチャ (プラットフォーム構成) には、使用できるハードウェア データ ブレークポイントの数が限られています。 次の表では、アーキテクチャごとに使用できるレジスタの数を示します。

Architecture ハードウェアでサポートされているデータ ブレークポイントの数 最大バイト サイズ
x86 4 4
X64 4 8
ARM 1 4
ARM64 2 8

フィードバックを提供する

この機能に関する問題や提案については、IDE または Developer CommunityHelp>Send Feedback>Report a Problem からお知らせください。

関連項目