218

変数にウォッチを配置し、その値が変更されたときにのみVisual Studioを中断させる方法はありますか?

トリッキーな状態の問題を見つけるのがとても簡単になります。

これはできますか?

ブレークポイント条件にはまだブレークポイントを設定する必要があります。監視を設定して、状態の変化時にVisualStudioにブレークポイントを設定させたいと思います。

4

13 に答える 13

142

Visual Studio 2005 メニュー:

デバッグ->新しいブレークポイント->新しいデータ ブレークポイント

入る:

&myVariable
于 2008-10-01T22:36:30.443 に答える
30

コードで明示的に中断することも選択できます。

// Assuming C#
if (condition)
{
    System.Diagnostics.Debugger.Break();
}

MSDN から:

Debugger.Break: デバッガーがアタッチされていない場合、ユーザーはデバッガーをアタッチするかどうかを尋ねられます。はいの場合、デバッガーが開始されます。デバッガーがアタッチされている場合、デバッガーはユーザー ブレークポイント イベントで通知され、デバッガー ブレークポイントがヒットしたかのように、デバッガーはプロセスの実行を中断します。

ただし、これは単なるフォールバックです。他のコメントで説明されているように、Visual Studio で条件付きブレークポイントを設定することをお勧めします。

于 2008-10-01T22:45:30.017 に答える
28

Visual Studio 2015ではset、自動実装プロパティのアクセサーにブレークポイントを配置でき、プロパティが更新されるとデバッガーが中断します。

public bool IsUpdated
{
    get;
    set;    //set breakpoint on this line
}

アップデート

あるいは; @AbdulRaufMujahid はコメントで、自動実装されたプロパティが 1 行にある場合、カーソルをget;orset;に合わせてヒットF9すると、それに応じてブレークポイントが配置されることを指摘しています。良い!

public bool IsUpdated { get; set; }
于 2016-06-16T21:31:47.253 に答える
13

次の宣言を持つ A というクラスがあるとします。

class A  
{  
    public:  
        A();

    private:
        int m_value;
};

誰かが「m_value」の値を変更したときにプログラムを停止したいとします。

クラス定義に移動し、A のコンストラクターにブレークポイントを配置します。

A::A()
{
    ... // set breakpoint here
}

プログラムを停止したら:

デバッグ -> 新しいブレークポイント -> 新しいデータ ブレークポイント ...

アドレス: &(this->m_value)
バイト数: 4 (int が 4 バイトのため)

これで、プログラムを再開できます。値が変更されると、デバッガーは停止します。

継承されたクラスまたは複合クラスでも同じことができます。

class B
{
   private:
       A m_a;
};

アドレス: &(this->m_a.m_value)

調べたい変数のバイト数がわからない場合は、sizeof 演算子を使用できます。

例えば:

// to know the size of the word processor,  
// if you want to inspect a pointer.
int wordTam = sizeof (void* ); 

「コールスタック」を見ると、変数の値を変更した関数がわかります。

于 2011-03-05T20:50:44.400 に答える
10

変数をプロパティに変更し、set メソッドにブレークポイントを追加します。例:

private bool m_Var = false;
protected bool var
{
    get { 
        return m_var;
    }

    set { 
        m_var = value;
    }
}
于 2013-09-04T14:35:40.367 に答える
4

WPF を使用している場合、すばらしいツールがあります: WPF Inspectorです。
それ自体を WPF アプリにアタッチし、すべてのプロパティを含むコントロールの完全なツリーを表示し、(とりわけ) プロパティの変更を中断することができます。

しかし残念ながら、任意のプロパティまたは変数で同じことを実行できるツールは見つかりませんでした。

于 2011-11-17T17:14:53.720 に答える
4

2019 年の更新:

これは、.Net Core 3.0 以降の Visual Studio 2019 Preview 2 で正式にサポートされるようになりました。もちろん、IDE のプレビュー バージョンを使用することの潜在的なリスクについて、いくつかの考慮が必要になる場合があります。近い将来、これが公式の Visual Studio に含まれるようになると思います。

https://blogs.msdn.microsoft.com/visualstudio/2019/02/12/break-when-value-changes-data-breakpoints-for-net-core-in-visual-studio-2019/

さいわい、データ ブレークポイントは、Visual Studio 2019 Preview 2 の .NET Core (3.0 以降) で使用できるようになったため、C++ 専用ではなくなりました!

于 2019-02-12T19:21:07.060 に答える
3

VisualBasic6.0を使用して説明した方法を覚えています。Visual Studioでこれまでに見つけた唯一の方法は、ブレークポイント条件を指定することです。

于 2008-10-01T22:28:18.077 に答える
2

ブレークポイントを右クリックすると問題なく機能します(ただし、ほとんどの場合、特定の変数値の条件付きブレークポイントに使用しています。スレッド名を含む式でのブレークでも機能します。これは、スレッドの問題を見つけようとしている場合に非常に便利です)。

于 2008-10-01T22:28:15.313 に答える
1

アンマネージ コードでメモリ ウォッチポイントを使用できます。ただし、これらがマネージ コードで利用できるかどうかはわかりません。

于 2008-10-01T22:38:20.640 に答える
1

おそらく、DebugBreak()関数をうまく使うことができます。

于 2011-05-18T06:52:40.657 に答える