次の方法で共有


WinDbg および他の Windows デバッガーの条件付きブレークポイント

WinDbg およびその他の Windows デバッガーの条件付きブレークポイントは、特定の条件が満たされた場合にのみ中断する必要がある場合に便利です。

条件付きブレークポイントは、 bp (ブレークポイントの設定) またはその他のブレークポイント コマンドに対する "/w" パラメーターを使用して作成されます。 コマンドの基本的な構文は次のとおりです。

0:000> bp /w "(Condition)" Address

ブレークポイントは、指定された条件が true の場合にのみデバッガーに中断を引き起こします。 "w" は "when" の省略形です。 条件式には、 dx (デバッガー オブジェクト モデル式の表示) コマンドで使用できる任意の値を指定できます。 これには、比較、算術演算、ポインター演算などのほとんどの C++ スタイル式が含まれます。 たとえば、変数が 20 を超える場合にのみ中断する基本的な条件付きブレークポイントは、次のように記述できます。

0:000> bp /w "MyVar > 20" `mysource.cpp:143`

条件はデバッガー オブジェクト モデルを使用して評価されるため、NatVis のサポートなどを利用することもできます。 たとえば、myVec が std::vector<int>であると仮定すると、次のような条件を作成できます。

0:000> bp /w "myVec.Count() == 4" `mysource.cpp:143`

これは、myVec 変数に 4 つの要素がある間に、mysource.cppの 143 行目が実行されたときに中断されます。

natvis 以外に、JavaScript 関数を呼び出すこともできます。 WinDbg スクリプト ウィンドウまたは "myFunc" という関数を含む .scriptload (スクリプトの読み込み) コマンドを使用してスクリプトを読み込む場合は、次のようにブレークポイントを設定できます。

0:000> bp /w "@$scriptContents.myFunc()" `mysource.cpp:143`

デバッガーでの JavaScript 関数と拡張機能の記述の詳細については、「JavaScript デバッガースクリプト」を参照してください。

通常、上位レベルの式が最も役立ちますが、これらの式を使用してレジスタを評価することもできます。 たとえば、スタック ポインターがしきい値に達したときにのみトリガーされるブレークポイントを作成できます。

0:000> bp /w "@esp < 0x6ff9f8" `mysource.cpp:143`

従来の条件付きブレークポイント構文

ブレークポイント コマンドに対して "/w" パラメーターを使用できるようになる前に、条件付きブレークポイントを設定する推奨される方法は、 j (Execute If - Else) コマンドまたは .if トークンの後に gc (条件付きブレークポイントから移動) コマンドを使用することでした。 条件付きブレークポイントを設定するこれらのメソッドは推奨されなくなりましたが、引き続き機能し、他のソースでこの構文が参照されている場合があります。

j コマンドを使用した条件付きブレークポイントの基本的な構文は次のとおりです。

0:000> bp Address "j (Condition) 'OptionalCommands'; 'gc' "

.if トークンを使用する条件付きブレークポイントの基本的な構文は次のとおりです。

0:000> bp Address ".if (Condition) {OptionalCommands} .else {gc}"