次: Command Files, 前: Define, 上: Sequences
特別な種類のユーザ定義コマンドである、 フックを定義することができます。 `hook-foo'というユーザ定義コマンドが存在すると、 `foo'というコマンドを実行するときにはいつも、 `foo'コマンドが実行される前に (引数のない) `hook-foo'が実行されます。
また、 仮想コマンドである`stop'が存在します。 (`hook-stop'を) 定義すると、 ユーザ・プログラムの実行が停止するたびに、 その定義内のコマンドが実行されます。 実行タイミングは、 ブレイクポイント・コマンドの実行、 自動表示対象の表示、 および、 スタック・フレームの表示の直前です。
例えば、
シングル・ステップ実行をしている際にはSIGALRMシグナルを無視し、
通常の実行時には通常どおり処理したい場合には、
以下のように定義します。
define hook-stop
handle SIGALRM nopass
end
define hook-run
handle SIGALRM pass
end
define hook-continue
handle SIGLARM pass
end
GDBのコマンドのうち、
その名前が1つの単語から成るものには、
フックを定義することができます。
ただし、
コマンド・エイリアスにフックを定義することはできません。
フックは、
コマンドの基本名に対して定義しなければなりません。
例えば、
btではなくbacktraceを使います。
フックの実行中にエラーが発生すると、
GDBコマンドは停止します。
(ユーザが実際に入力したコマンドが実行する機会を与えられる前に)
GDBはプロンプトを表示します。
既知のコマンドのいずれにも対応しないフックを定義しようとすると、
defineコマンドは警告メッセージを表示します。