Next: , Previous: Sequences, Up: Sequences


15.1 ユーザ定義コマンド

ユーザ定義コマンドとは、 一連のGDBコマンドに単一コマンドとしての名前を新たに割り当てたものです。 これは、 defineコマンドによって行われます。 ユーザ・コマンドは、 空白で区切られた引数を最高で10個まで受け取ることができます。 引数は、 ユーザ・コマンドの中で、 $arg0...$arg9としてアクセスすることができます。 簡単な例を以下に示します。

     define adder
       print $arg0 + $arg1 + $arg2

このコマンドを実行するには、以下のようにします。

     adder 1 2 3

上の例では、 adderというコマンドを定義しています。 このコマンドは、 3つの引数の合計を表示します。 引数は文字列で代用されますので、 変数を参照することもできますし、 複雑な式を使うこともできます。 また、 下位関数の呼び出しを行うこともできます。

define commandname
commandnameという名前のコマンドを定義します。 同じ名前のコマンドが既に存在する場合は、 再定義の確認を求められます。

コマンドの定義は、 defineコマンドに続いて与えられる、 他のGDBコマンド行から構成されます。 これらのコマンドの末尾は、 endを含む行によって示されます。


if
引数として、 評価の対象となる式を1つだけ取ります。 その後に一連のコマンドが続きますが、 これらのコマンドは、 式の評価結果が真 (ゼロ以外の値) である場合にだけ実行されます。 さらに、 else行が続くことがあり、 この場合は、 else行の後に、 式の評価結果が偽であった場合にだけ実行される一連のコマンドが続きます。 末尾は、 endを含む行によって示されます。


while
構文はifと似ています。 引数として、 評価の対象となる式を1つだけ取ります。 その後には、 実行されるべきコマンドが1行に1つずつ続き、 最後にendがなければなりません。 コマンドは、 式の評価結果が真である限り、 繰り返し実行されます。


document commandname
ユーザ定義コマンドcommandnameのドキュメントを記述します。 このドキュメントはhelpコマンドによってアクセスできます。 コマンドcommandnameは既に定義済みでなければなりません。 このコマンドは、 defineコマンドが一連のコマンド定義を読み込むのと同様に、 endで終わる一連のドキュメントを読み込みます。 documentコマンドの実行が完了すると、 コマンドcommandnameに対してhelpコマンドを実行すると、 ユーザの記述したドキュメントが表示されます。

documentコマンドを再度実行することによって、 コマンドのドキュメントを変更することができます。 defineコマンドによってコマンドを再定義しても、 ドキュメントは変更されません。


help user-defined
すべてのユーザ定義コマンドを一覧表示します。 個々のコマンドにドキュメントがあれば、 その1行目が表示されます。


show user
show user commandname
commandnameで指定されるコマンドを定義するのに使われたGDBコマンドを表示します (ドキュメントは表示されません)。 commandnameを指定しないと、 すべてのユーザ定義コマンドの定義が表示されます。

ユーザ定義コマンドが実行されるときに、 定義内のコマンドは表示されません。 定義内のコマンドがどれか1つでもエラーになると、 ユーザ定義コマンドの実行が停止されます。

対話的に使われている場合には確認を求めてくるようなコマンドも、 ユーザ定義コマンドの内部で使われている場合には確認を求めることなく処理を継続します。 通常は実行中の処理に関してメッセージを表示するGDBコマンドの多くが、 ユーザ定義コマンドの中から呼び出されている場合にはメッセージを表示しません。