変数にウォッチを配置し、その値が変更されたときにのみVisual Studioを中断させる方法はありますか?
トリッキーな状態の問題を見つけるのがとても簡単になります。
これはできますか?
ブレークポイント条件にはまだブレークポイントを設定する必要があります。監視を設定して、状態の変化時にVisualStudioにブレークポイントを設定させたいと思います。
変数にウォッチを配置し、その値が変更されたときにのみVisual Studioを中断させる方法はありますか?
トリッキーな状態の問題を見つけるのがとても簡単になります。
これはできますか?
ブレークポイント条件にはまだブレークポイントを設定する必要があります。監視を設定して、状態の変化時にVisualStudioにブレークポイントを設定させたいと思います。
Visual Studio 2005 メニュー:
デバッグ->新しいブレークポイント->新しいデータ ブレークポイント
入る:
&myVariable
コードで明示的に中断することも選択できます。
// Assuming C#
if (condition)
{
System.Diagnostics.Debugger.Break();
}
MSDN から:
Debugger.Break: デバッガーがアタッチされていない場合、ユーザーはデバッガーをアタッチするかどうかを尋ねられます。はいの場合、デバッガーが開始されます。デバッガーがアタッチされている場合、デバッガーはユーザー ブレークポイント イベントで通知され、デバッガー ブレークポイントがヒットしたかのように、デバッガーはプロセスの実行を中断します。
ただし、これは単なるフォールバックです。他のコメントで説明されているように、Visual Studio で条件付きブレークポイントを設定することをお勧めします。
Visual Studio 2015ではset
、自動実装プロパティのアクセサーにブレークポイントを配置でき、プロパティが更新されるとデバッガーが中断します。
public bool IsUpdated
{
get;
set; //set breakpoint on this line
}
アップデート
あるいは; @AbdulRaufMujahid はコメントで、自動実装されたプロパティが 1 行にある場合、カーソルをget;
orset;
に合わせてヒットF9
すると、それに応じてブレークポイントが配置されることを指摘しています。良い!
public bool IsUpdated { get; set; }
次の宣言を持つ 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* );
「コールスタック」を見ると、変数の値を変更した関数がわかります。
変数をプロパティに変更し、set メソッドにブレークポイントを追加します。例:
private bool m_Var = false;
protected bool var
{
get {
return m_var;
}
set {
m_var = value;
}
}
WPF を使用している場合、すばらしいツールがあります: WPF Inspectorです。
それ自体を WPF アプリにアタッチし、すべてのプロパティを含むコントロールの完全なツリーを表示し、(とりわけ) プロパティの変更を中断することができます。
しかし残念ながら、任意のプロパティまたは変数で同じことを実行できるツールは見つかりませんでした。
2019 年の更新:
これは、.Net Core 3.0 以降の Visual Studio 2019 Preview 2 で正式にサポートされるようになりました。もちろん、IDE のプレビュー バージョンを使用することの潜在的なリスクについて、いくつかの考慮が必要になる場合があります。近い将来、これが公式の Visual Studio に含まれるようになると思います。
さいわい、データ ブレークポイントは、Visual Studio 2019 Preview 2 の .NET Core (3.0 以降) で使用できるようになったため、C++ 専用ではなくなりました!
VisualBasic6.0を使用して説明した方法を覚えています。Visual Studioでこれまでに見つけた唯一の方法は、ブレークポイント条件を指定することです。
ブレークポイントを右クリックすると問題なく機能します(ただし、ほとんどの場合、特定の変数値の条件付きブレークポイントに使用しています。スレッド名を含む式でのブレークでも機能します。これは、スレッドの問題を見つけようとしている場合に非常に便利です)。
アンマネージ コードでメモリ ウォッチポイントを使用できます。ただし、これらがマネージ コードで利用できるかどうかはわかりません。
おそらく、DebugBreak()関数をうまく使うことができます。