イベント フィルター は、単純なイベント フィルター処理を提供します。これらは、ターゲットでイベントが発生した後のデバッガー エンジンの進行方法に影響します。 イベントが発生すると、エンジンはそのイベントがイベント フィルターと一致するかどうかを判断します。 その場合、イベント フィルターの中断状態は、デバッガーがターゲットに分割されるかどうかに影響します。 イベントが例外イベントの場合、処理状態によって、例外をターゲットで処理済みと見なす必要があるかどうかが決まります。
手記 より高度なイベント フィルター処理が必要な場合は、イベント コールバックを使用できます。
イベント フィルターは、3 つのカテゴリに分かれています。
特定のイベント フィルター。 これらは、すべての非例外イベントのフィルターです。 これらのイベントの一覧については、 DEBUG_FILTER_XXX を参照してください。
特定の例外フィルター。 最初の特定の例外フィルターは 、既定の例外フィルターです。 残りは、エンジンに組み込みのフィルターがある例外のフィルターです。 特定の例外フィルターの一覧については、「特定の例外」を参照してください。
任意の例外フィルター。 これらは、手動で追加された例外イベントのフィルターです。
カテゴリ 1 とカテゴリ 2 のフィルターは、まとめて 特定のフィルターと呼ばれ、カテゴリ 2 とカテゴリ 3 のフィルターはまとめて 例外フィルターと呼ばれます。 各カテゴリのフィルターの数は、 GetNumberEventFilters によって返されます。
イベントの種類がフィルターの型と同じ場合、イベントは特定のイベント フィルターと一致します。 一部のイベント フィルターには、一致するイベントをさらに制限する追加のパラメーターがあります。
例外イベントの例外コードが例外フィルターの例外コードと同じ場合、例外イベントは例外フィルターと一致します。 例外イベントと同じ例外コードを持つ例外フィルターがない場合、例外イベントは既定の例外フィルターによって処理されます。
コマンドとパラメーター
イベント フィルターには、デバッガー コマンドを関連付けることができます。 このコマンドは、フィルターに一致するイベントが発生したときにエンジンによって実行されます。 GetEventFilterCommand と SetEventFilterCommand を使用して、このコマンドを取得および設定できます。 例外フィルターの場合、このコマンドは例外が最初に発生した場合に実行されます。 2 回目の例外イベントに対して、別の second-chance コマンドを実行できます。 second-chance コマンドを取得して設定するには、 GetExceptionFilterSecondCommand と SetExceptionSecondChanceCommand を使用します。
特定のイベント フィルターと例外フィルターのパラメーターは、 GetSpecificFilterParameters と GetExceptionFilterParameters によって返されます。 イベント フィルターの中断状態と処理状態は、 SetSpecificFilterParameters と SetExceptionFilterParameters を使用して設定できます。
SetExceptionFilterParameters を使用して、任意の例外フィルターを追加および削除することもできます。
特定のフィルターの簡単な説明は 、GetEventFilterText によって返されます。
一部の特定のフィルターは、フィルターが一致するイベントを制限する引数を受け取ります。 GetSpecificFilterArgument と SetSpecificFilterArgument は、引数をサポートする特定のフィルターの引数を取得および設定します。 特定のフィルターに引数がない場合、一致するイベントに制限はありません。 次の表に、引数を受け取るイベント フィルターと、それらに一致するイベントを制限する方法を示します。
| 出来事 | 一致条件 |
|---|---|
プロセスの作成 |
作成されたプロセスの名前が引数と一致している必要があります。1 |
退出プロセス |
終了したプロセスの名前は引数と一致している必要があります。1 |
モジュールの読み込み |
読み込まれたモジュールの名前が argument.1 と一致している必要があります。 |
モジュールのアンロード |
アンロードされたモジュールのベース アドレスは、引数と同じである必要があります。2 |
ターゲット出力 |
ターゲットからのデバッグ出力が引数と一致している必要があります。3 |
ノート
引数は 文字列ワイルドカード構文 を使用し、イベントが発生したときにイメージ名 (パスを無視) と比較されます。 モジュールまたはプロセスの名前が使用できない場合は、一致と見なされます。
引数は、引数が設定されたときにエンジンによって評価される式です。
引数は文字列ワイルドカード構文を使用し、ターゲットからのデバッグ出力と比較されます。 出力が不明な場合は、一致と見なされます。
インデックスと例外コード
各イベント フィルターにはインデックスがあります。 インデックスは、0からフィルターの総数から1を引いた数値までの範囲に含まれます。 フィルターの各カテゴリのインデックス範囲は、次の表に示すように、GetNumberEventFilters によって返される SpecificEvents、SpecificExceptions、および ArbitraryExceptions の値から確認できます。
| イベント フィルター | 最初のフィルターのインデックス | フィルターの数 |
|---|---|---|
特定のイベント フィルター |
0 |
SpecificEvents |
特定の例外フィルター |
SpecificEvents |
SpecificExceptions |
任意の例外フィルター |
SpecificEvents + SpecificExceptions |
ArbitraryExceptions |
特定のイベント フィルターのインデックスは、トピック DEBUG_FILTER_XXXにある最初のテーブルにあります。 既定の例外フィルター (最初の特定の例外フィルター) のインデックスは SpecificEvents です。 任意の例外フィルターが削除されると、他の任意の例外フィルターのインデックスが変更される可能性があります。
例外フィルターは通常、例外コードによって指定されます。 ただし、一部のメソッドでは例外のインデックスが必要です。 特定の例外の例外フィルターのインデックスを検索するには、 GetExceptionFilterParameters を使用して、例外と同じ例外コードを持つフィルターが見つかるまで、すべての例外フィルターを反復処理します。 特定の例外フィルターの例外コードについては、トピック「 特定の例外」を参照してください。
システム エラー
指定したレベル以下でシステム エラーが発生した場合、エンジンはデバッガーに入るか、エラーを出力ストリームに表示します。 これらのレベルは GetSystemErrorControl によって返され、 SetSystemErrorControl を使用して変更できます。