Next: , Previous: Define, Up: Sequences


15.2 ユーザ定義コマンド・フック

特別な種類のユーザ定義コマンドである、 フックを定義することができます。 ‘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コマンドは警告メッセージを表示します。