ba (アクセス時に中断)

ba コマンドは 、プロセッサブレークポイント (多くの場合、データ ブレークポイントと呼ばれる、精度が低い) を設定します。 このブレークポイントは、指定されたメモリにアクセスするときにトリガーされます。

User-Mode

[~Thread] ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]

Kernel-Mode

ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]

パラメーター

スレッド
ブレークポイントを適用するスレッドを指定します。 構文の詳細については、「スレッド構文」 を参照してください。 スレッドは、ユーザー モードでのみ指定できます。

ID
ブレークポイントを識別する省略可能な数値を指定します。 ID を指定しない場合 、使用可能な最初のブレークポイント番号が使用されます。 ba と ID 番号の 間にスペース を追加することはできません。 各プロセッサは、限られた数のプロセッサ ブレークポイントのみをサポートしますが、 ID 番号の値に制限はありません。 ID を 角かっこ ( []) で囲む場合、 ID には 任意の式を含めできます。 構文の詳細については、「数値式の構文 」を参照してください

アクセス
ブレークポイントを満たすアクセスの種類を指定します。 このパラメーターには、次の値のいずれかを指定できます。

オプション アクション

e (execute)

CPU が指定したアドレスから命令を取得すると、デバッガーに割り込みます。

r (読み取り/書き込み)

CPU が指定したアドレスで読み取りまたは書き込みを行った場合、デバッガーに割り込みます。

w (書き込み)

CPU が指定したアドレスで書き込むときにデバッガーに割り込みます。

i (i/o)

(カーネル モードのみ、x86 ベースのシステムのみ)指定したアドレスにある I/O ポートにアクセスすると、 デバッガー に割り込みます。

サイズ
アクセスを監視する場所のサイズをバイト単位で指定します。 x86 ベースのプロセッサでは、このパラメーターは 1、2、または 4 です。 ただし、 Access が eの場合Size は 1 である必要があります。

x64 ベースのプロセッサでは、このパラメーターは 1、2、4、または 8 です。 ただし、 Access が eの場合Size は 1 である必要があります。

オプション
ブレークポイント オプションを指定します。 次に示すオプションを除き、任意の数のオプションを使用できます。

/1
"ワンショット" ブレークポイントを作成します。 このブレークポイントがトリガーされると、ブレークポイントはブレークポイントの一覧から完全に削除されます。

/pEProcess
(カーネル モードのみ)このブレークポイントに関連付けられているプロセスを指定します。 EProcess は、PID ではなく、EPROCESS 構造体の実際のアドレスである必要があります。 ブレークポイントは、このプロセスのコンテキストでブレークポイントが検出された場合にのみトリガーされます。

/tEThread
(カーネル モードのみ)このブレークポイントに関連付けられているスレッドを指定します。 EThread は、スレッド ID ではなく、ETHREAD 構造体の実際のアドレスである必要があります。 ブレークポイントは、このスレッドのコンテキストでブレークポイントが検出された場合にのみトリガーされます。 /pEProcess/tEThread を使用する場合は、どちらの順序でも入力できます。

/cMaxCallStackDepth
呼び出し履歴の深さが MaxCallStackDepth より小さい場合にのみ、ブレークポイントがアクティブになります。 このオプションを /C と組 み合わせすることはできません

/CMinCallStackDepth
呼び出し履歴の深さが MinCallStackDepth より大きい場合にのみ、ブレークポイントがアクティブになります。 このオプションを /c と組 み合わせすることはできません

アドレス
有効なアドレスを指定します。 アプリケーションがこのアドレスのメモリにアクセスすると、デバッガーは実行を停止し、すべてのレジスタとフラグの現在の値を表示します。 このアドレスはオフセットで、Size パラメーターに合わせて適切に配置 する必要 があります。 (たとえば、Size が 4 場合、 Address は 4 の倍数である必要があります)。 Address を省略 した場合は、現在の命令ポインターが使用されます。 構文の詳細については、「アドレスとアドレス範囲の構文」を参照してください。

渡します
ブレークポイントがアクティブになるまで、ブレークポイントが渡される回数を指定します。 この数値には、任意の 16 ビット値を指定できます。 プログラム カウンターがブレークせずにこのポイントを通過する回数は、この数値の値より 1 つ小さい値です。 したがって、この数値を省略すると、1 に設定するのと同じです。 また、この数は、この時点を過ぎた時点でアプリケーションが実行 される時間 のみをカウントします。 このポイントを過ぎたステップ実行またはトレースはカウントされません。 完全なカウントに達した後は、ブレークポイントをクリアしてリセットすることでのみ、この数値をリセットできます。

CommandString
ブレークポイントが指定された回数発生するたび実行するコマンドの一覧を指定します。 これらのコマンドは、t (Trace) または p (Step) コマンドの後ではなく、g (Go) コマンドを実行した後にブレークポイントにヒットした場合にのみ実行されます。 CommandString のデバッガー コマンドには、パラメーターを含めできます。

このコマンド文字列は引用符で囲む必要があります。また、複数のコマンドをセミコロンで区切る必要があります。 標準の C 制御文字 ( 例:\n\") を使用できます。 第 2 レベルの引用符 (\") に含まれるセミコロンは、埋め込まれた引用符で囲まれた文字列の一部として解釈されます。

このパラメーターは省略できます。

環境

モード

ユーザー モード、カーネル モード

ターゲット

ライブ デバッグのみ

プラットフォーム

All

追加情報

プロセッサ ブレークポイントの詳細については、「プロセッサ ブレークポイント (ba ブレークポイント)」を参照してください。 ブレークポイントの使用の詳細と例、ブレークポイントを制御するその他のブレークポイント コマンドとメソッド、カーネル デバッガーからユーザー空間にブレークポイントを設定する方法については、「ブレークポイントの使用」を参照してください。 条件付きブレークポイントの詳細については、「条件付きブレークポイント の設定」を参照してください

注釈

デバッガーは ID 番号を使用 して、後の bc (ブレークポイントクリア)bd (ブレークポイントの無効化)、および (ブレークポイント の有効化) コマンドでブレークポイントを参照します。

bl (ブレークポイント一覧) コマンドを使用して、既存のすべてのブレークポイント、その ID 番号、およびそれらの状態を一覧表示します。

.bpcmds (ブレークポイント コマンドの表示) コマンドを使用して、既存のすべてのブレークポイント、その ID 番号、およびそれらを作成するために使用されたコマンドを一覧表示します。

各プロセッサ ブレークポイントには、関連付けられたサイズがあります。 たとえば、 w (書き込み) プロセッサブレークポイントは、アドレス0x70001008 に4バイトのサイズで設定できます。 これにより、0x70001008 から0X70001008 までのアドレスブロックが監視されます。 このメモリブロックがに書き込まれると、ブレークポイントがトリガーされます。

プロセッサは、指定された領域と 重複 しているが、同じではないメモリ領域に対して操作を実行する可能性があります。 この例では、0x70001000 から0x7000100F の範囲を含む1回の書き込み操作、または0x70001009 のバイトのみを含む書き込み操作は、重複した操作になります。 このような状況では、ブレークポイントがトリガーされるかどうかはプロセッサに依存します。 具体的な詳細については、プロセッサのマニュアルを参照してください。 X86 プロセッサ上で1つの特定のインスタンスを取得するには、アクセスされた範囲がブレークポイントの範囲と重複するたびに読み取りまたは書き込みのブレークポイントがトリガーされます。

同様に、 e (実行) ブレークポイントがアドレス0x00401003 に設定されていて、2バイトの命令をアドレス0x00401003 と0x00401003 で実行した場合、結果はプロセッサに依存します。 ここでも、詳細については、プロセッサアーキテクチャのマニュアルを参照してください。

プロセッサは、ユーザーモードのデバッガーによって設定されたブレークポイントと、カーネルモードのデバッガーによって設定されたブレークポイントを区別します。 ユーザーモードプロセッサのブレークポイントは、カーネルモードのプロセスには影響しません。 カーネルモードのプロセッサブレークポイントは、ユーザーモードのコードがデバッグレジスタの状態を使用しているかどうか、アタッチされたユーザーモードのデバッガーがあるかどうかによって、ユーザーモードのプロセスに影響を与える場合と、ない場合があります。

現在のプロセスの既存のデータブレークポイントを別のレジスタコンテキストに適用するには、 .apply_dbp (データブレークポイントをコンテキストに適用) コマンドを使用します。

マルチプロセッサコンピューターでは、各プロセッサブレークポイントはすべてのプロセッサに適用されます。 たとえば、現在のプロセッサが3で、コマンド ba e1 MyAddress を使用して、MyAddress にブレークポイントを設定した場合、そのアドレスで実行されるプロセッサ3だけではなく、ブレークポイントがトリガーされます。 (これはソフトウェアブレークポイントにも当てはまります)。

Commandstring値のみが異なる同じアドレスに複数のプロセッサブレークポイントを作成することはできません。 ただし、異なる制限が設定されている同じアドレスに複数のブレークポイントを作成することができます (たとえば、 /p/t/c、および /c オプションの値が異なります)。

プロセッサブレークポイントとそれに適用されるその他の制限の詳細については、「 プロセッサブレークポイント (Ba ブレークポイント)」を参照してください。

次の例は、 ba コマンドを示しています。 次のコマンドは、変数 myVar の4バイトで読み取りアクセスのブレークポイントを設定します。

0:000> ba r4 myVar

次のコマンドは、アドレスが0x3F8 から0X3f8 のすべてのシリアルポートにブレークポイントを追加します。 このブレークポイントは、これらのポートに対して読み取りまたは書き込みが行われた場合にトリガーされます。

kd> ba i4 3f8