イベント指定のため修飾子は、ハンドラの追加属性を設定します。もっとも一般的な種類はイベントフィルタです。修飾子はイベント指定のキーワードのあとに指定しなければなりません。修飾子はダッシュ ( -) から始まります。各修飾子の構成は次のとおりです。
-if 修飾子の構文:
-if condition
イベント仕様で指定されたイベントが発生したとき、条件が評価されます。イベントは、条件が非ゼロと評価された場合にだけ発生すると考えられます。
–if 修飾子が、in または at などの 1 つだけのソース位置が関連付けられたイベントで使用された場合、condition はその位置に対応するスコープで評価されます。そうでない場合は、必要なスコープによって正しく修飾する必要があります。
マクロ展開は、print コマンドと同じ規約に従った条件で実行されます。
–resumeone 修飾子は、マルチスレッドプログラムのイベント指定で、-if 修飾子とともに使用して、条件に関数呼び出しが含まれている場合に 1 つのスレッドのみを再開させることができます。詳細については、条件付きフィルタによるブレークポイントの修飾を参照してください。
-in 修飾子の構文:
-in function
イベントは指定した関数の最初の命令に達したときから、関数が戻るときまでの間に発生した場合にのみトリガーします。関数の再帰は無視されます。
-count 修飾子の構文:
-count n
または
-count infinity
–count n および -count infinity 修飾子は、0 からのハンドラカウントを持ちます (イベントカウンタの使用を参照)。イベントが発生するたび、n に達するまでカウントはインクリメントします。一度それが生じると、ハンドラはファイアし、カウンタはゼロにリセットされます。
プログラムが実行または再実行されると、すべてのイベントのカウントがリセットされます。より具体的に言えば、カウントは sync イベントが発生するとリセットされます。
カウントは debug –r コマンド (debug コマンドを参照) または attach –r コマンド (attach コマンドを参照) を使用して新しいプログラムのデバッグを開始したときにリセットされます。
-temp 修飾子は一時ハンドラを作成します。イベントが発生すると、一時イベントは削除されます。デフォルトではハンドラは、一時イベントではありません。ハンドラが計数ハンドラ (-count が指定されたイベント) の場合はゼロに達すると自動的に破棄されます。
一時ハンドラをすべて削除するには delete -temp を実行します。
-instr 修飾子はハンドラを命令レベルで動作させます。これにより、ほとんどの ' i' で始まるコマンドは不要となります。この修飾子は、イベントハンドラの 2 つの面を修飾します。
出力されるどのメッセージもソースレベルの情報ではなく、アセンブリレベルを示す。
イベントの細分性が命令レベルになる。たとえば step –instr は、命令レベルのステップ実行を意味する。
-thread 修飾子の構文:
-thread thread-ID
-thread 修飾子はイベントを発生させたスレッドが異なるスレッド ID に一致する場合にのみ、アクションが実行されることを意味します。プログラムが次から次に実行されるうちに、目的とする特定のスレッドに、異なるスレッド ID が割り当てられることがあります。
-lwp 修飾子の構文:
-lwp lwp-ID
-lwp 修飾子はイベントを発生させた -lwp が lwp-ID に一致する場合にのみ、アクションが実行されることを意味します。プログラムが次から次に実行されるうちに、目的とする特定の -lwp に、異なる lwp-ID が割り当てられることがあります。
-hidden 修飾子は 通常の status コマンドでハンドラを非表示にします。隠されたハンドラを表示するには、status –h を使用してください。
通常、すべてのハンドラは、新しいプログラムが読み込まれると廃棄されます。–perm 修飾子を使用すると、デバッグセッション間でハンドラが維持されます。delete コマンド単独では、永続ハンドラは削除されません。永続ハンドラを削除するには、delete –p を使用してください。