ブレークポイントのフラグとパラメーターの制御
ブレークポイントに関する基本情報を判別するために使用できるメソッドは多数あります。
GetId は、ブレークポイント ID を返します。
GetType は、ブレークポイントの種類 (ソフトウェアまたはプロセッサ) と、ブレークポイントが設定されている有効なプロセッサの種類を返します。
GetAdder は、ブレークポイントを追加したクライアントを返します。
GetOffset はブレークポイントのアドレスを返します。
GetOffsetExpression は、ブレークポイントの場所を指定する式文字列を返します。
ブレークポイントには、その場所とブレークポイントの種類に加えて、動作を制御するいくつかのパラメーターがあります。
ブレークポイント パラメーターは、さまざまな特定のメソッドを使用して制御できます。 さらに、ほとんどのパラメーターに対して、GetParameters を使用してクエリを実行できます。
ブレークポイント フラグ
ブレークポイント フラグは、ブレークポイント パラメーターの一種です。
ブレークポイント フラグには、GetFlags を使用してクエリを実行できます。 これらは、AddFlags、RemoveFlags、SetFlags のいずれかを使用して変更できます。
ブレークポイント フラグは、ビット フィールドを形成します。 このビット フィールドで使用できるフラグとその意味は以下のとおりです。
DEBUG_BREAKPOINT_ENABLED
このフラグを設定すると、ブレークポイントが有効になり、通常の効果を発揮します。 このフラグが設定されていない場合、ブレークポイントは無効になり、効果はありません。 ブレークポイントを一時的に非アクティブ化する場合は、このフラグを削除できます。このブレークポイントを再び有効にする場合は、このフラグを簡単に追加し直すことができます。
DEBUG_BREAKPOINT_ADDER_ONLY
このフラグが設定されている場合、そのブレークポイントはプライベート ブレークポイントです。 このブレークポイントは、それを追加したクライアントでのみ表示されます。 この場合、他のクライアントはこのブレークポイントのエンジンに対してクエリを実行できず、エンジンは、ブレークポイントによって生成されたイベントを他のクライアントに送信しません。 このブレークポイントに関連するすべてのコールバック (イベントおよび出力) は、このクライアントにのみ送信されます。 「GetAdder」を参照してください。
DEBUG_BREAKPOINT_GO_ONLY
このフラグが設定されている場合、ターゲットが無制限で実行されている場合にのみブレークポイントがトリガーされます。 エンジンがターゲットで命令をステップ実行している場合は、トリガーされません。
DEBUG_BREAKPOINT_ONE_SHOT
このフラグが設定されている場合、ブレークポイントは、最初にトリガーされたときに自動的に削除されます。
DEBUG_BREAKPOINT_DEFERRED
このフラグが設定されている場合、ブレークポイントは遅延されます。 シンボリック式を使用してブレークポイントのオフセットが指定されており、エンジンが式を評価できない場合に、エンジンによってこのフラグが設定されます。 モジュールがターゲットに読み込まれるか、またはアンロードされるたびに、式によって場所が指定されているすべてのブレークポイントについて、エンジンは式の再評価を試みます。 評価できないものは、遅延としてフラグが設定されます。 このフラグは、どのクライアントでも変更できません。
その他のブレークポイント パラメーター
以下のブレークポイント パラメーターもあります。
通過回数
ブレークポイントに通過回数が関連付けられている場合、ターゲットによるブレークポイントの通過が指定回数に達するまでは、ブレークポイントはアクティブになりません。 当初設定されていた通過回数は、GetPassCount を使用して確認できます。 アクティブ化されるまでにエンジンがブレークポイントを通過する残り回数は、GetCurrentPassCount を使用して確認できます。 通過回数は、SetPassCount を使用して、新しい値にリセットできます。
スレッドの一致
ブレークポイントにスレッドが関連付けられている場合、他のスレッドによって検出されたときに、そのブレークポイントはエンジンによって無視されます。 このスレッドは、GetMatchThreadId を使用して確認でき、SetMatchThreadId を使用して変更できます。
コマンド
ブレークポイントには、コマンドが関連付けられている場合があります。 このコマンドは、ブレークポイントがアクティブになったときに実行されます。 このコマンドは、GetCommand を使用して確認でき、SetCommand を使用して変更できます。
[サイズ]
ブレークポイントがプロセッサ ブレークポイントである場合は、指定されたサイズである必要があります。 これにより、アクセスによってブレークポイントがアクティブになるメモリ ブロックのサイズが決まります。ブロックの先頭はブレークポイントの場所です。 このサイズは、GetDataParameters を使用して確認でき、SetDataParameters を使用して変更できます。
アクセスの種類
ブレークポイントがプロセッサ ブレークポイントである場合は、アクセスの種類が設定されている必要があります。 これにより、ブレークポイントをアクティブ化するアクセスの種類が決まります。 たとえば、ブレークポイントで指定されたメモリの読み取り、書き込み、実行をターゲットが行うと、ブレークポイントがアクティブ化される可能性があります。 このアクセスの種類は、GetDataParameters を使用して確認でき、SetDataParameters を使用して変更できます。
プロセッサ ブレークポイントの有効なパラメーター
プロセッサ ブレークポイントでは、以下のアクセスの種類を使用できます。
Value | 説明 |
---|---|
DEBUG_BREAK_READ |
このブレークポイントは、CPU がブレークポイントのメモリ ブロック内のメモリを読み取ったときにトリガーされます。 |
DEBUG_BREAK_WRITE |
このブレークポイントは、CPU がブレークポイントのメモリ ブロック内のメモリを書き込んだときにトリガーされます。 |
DEBUG_BREAK_READ | DEBUG_BREAK_WRITE | このブレークポイントは、CPU がブレークポイントのメモリ ブロック内のメモリの読み込みまたは書き込みを実行したときにトリガーされます。 |
DEBUG_BREAK_EXECUTE |
このブレークポイントは、CPU がブレークポイントのメモリ ブロック内の命令をフェッチするとトリガーされます。 |
DEBUG_BREAK_IO |
このブレークポイントは、ブレークポイントのメモリ ブロック内の I/O ポートがアクセスされたときにトリガーされます。 (Windows XP および Microsoft Windows Server 2003 のみ、カーネル モードのみ、x86 のみ) |
すべてのアクセスの種類とサイズがすべてのプロセッサでサポートされているわけではありません。 以下のアクセスの種類とサイズがサポートされています。
x86
すべてのアクセスの種類がサポートされています。 DEBUG_BREAK_READ は、DEBUG_BREAK_READ | DEBUG_BREAK_WRITE と同様に動作します。 サイズは 1、2、4 のいずれかである必要があります。 ブレークポイントのアドレスは、このサイズの倍数である必要があります。
X64
すべてのアクセスの種類がサポートされています。 DEBUG_BREAK_READ は、DEBUG_BREAK_READ | DEBUG_BREAK_WRITE と同様に動作します。 サイズは 1、2、4、8 のいずれかである必要があります。 ブレークポイントのアドレスは、このサイズの倍数である必要があります。