2011-06-13 3 views
19

私のC#をデバッグするときに、変数の値がに変更されたときに、をよく知りたい場合は、プログラムの状態を調べます。デバッグ時に「この変数が変更されるまで実行するにはどうすればよいですか?

現在、私はこのようにそれを行う:

  1. ウォッチリスト問題の変数を。
  2. 値が変更されるまで物理的に迷惑メールF10(ステップオーバーのショートカット)。

ただし、必要なF10の数は迷惑です。

確かにこれは自動化されていると私は考えました。しかし私はMicrosoft Visual C#Expressでこの機能を見つけることができません。結局、Watch-list は、変更された値を明るい赤で自動的にハイライト表示します。

何か不足していますか?

+0

AFAIKはネイティブデバッガのみをサポートしています。 –

答えて

19

簡単なトリック:

private string myValue; 
public string MyValue 
{ 
    set 
    { 
    if (this.myValue != value) Debugger.Break(); 
    this.myValue = value; 
    } 
} 
+1

現時点では、コードの一部が故意に変数を直接変更します。また、セッターは既に値を設定する以外にも多くのことを行います。 "setter-direct"とsetterアクセス​​のために別々のセッターを作ったとしても、そのフィールドは引き続きクラスから直接アクセスできます。 – Anko

+1

しかし、はい、それは完全に機能的な回避策です! – Anko

6

Conditional breakpointsですが、Visual Studio Expressでは使用できないようです。

Visual Studio(非エクスプレス)では、ウォッチ値に等しい式とブレークポイント条件として「変更あり」の条件付きブレークポイントを作成することができます。

+19

本当に。私は、OPは、任意の_dataブレークポイント_が必要であると仮定します。これは、任意のメモリ位置に何かが触れるたびにトリガされます。この種のブレークポイントは、Visual Studioでは使用できないAFAIKです。対照的に、データが変更され、コードがある_predefined_位置にある場合、条件付きブレークポイントがトリガされます。 – Vlad

0

ここで私はVisual Studioでこれを行います。 F9キーを押すか、左端の余白をクリックしてブレークポイントを設定します。表示される赤い点を右クリックして、[条件]コマンドを選択します。他にもオプションがあります。

ただし、これはVisual Studio Expressではサポートされていない可能性があります。

0

あなたは

は、あなたが変更をチェックし、if文ブレークポイントは、その内で発生している、ので、それは最初に壊れるif文を書くことができthis

0

、その後、あなたが履歴書をクリックしてご覧条件付きブレークポイントを使用することができますこのブレークポイントに当たるまで続きます。

Expressエディション用
+0

コードが大きく、問題の変数が多くの場所で変更される可能性があるため、これは私のためには機能しません。 (私は1000のif文を書く必要があります) – Anko

0

使用Debugger.Breakいくつかの実行時の状態に基づいて、またはいくつかのブレークポイントで右クリックを移動し、条件付きブレークを選択してください - >は

編集を変更しました:について知りませんこれは、エクスプレス

+0

いいえ、右クリックメニューにはExpressではそのようなオプションはありません。 – Anko

0
  1. にあなたはコードが
  2. オープンブレークポイントウィンドウを一時停止するブレークポイントを設定します
  3. ブレークポイントを右クリックして、条件を選択します。
  4. 条件を変数名に設定し、[変更あり]ラジオボタンを選択します。
  5. [OK]をクリックして、通常通りデバッグ:)
0

あなたはそれが変更された場所を正確に引くとは反対に、いくつかのブレークポイントで変数の変化をキャッチしたい場合は、ブレークポイントを設定し、それを右クリックし、 「条件」を選択します。変数名がXで、の現在の値がであるとします。条件フィールドに「X!= A」と入力します。

XがA以外の値に変更された後でのみ、ブレークポイントがヒットします。

関連する問題