ユーザ定義コマンドとは、
一連のGDBコマンドに単一コマンドとしての名前を新たに割り当てたものです。
これは、
defineコマンドによって行われます。
ユーザ・コマンドは、
空白で区切られた引数を最高で10個まで受け取ることができます。
引数は、
ユーザ・コマンドの中で、
$arg0...$arg9としてアクセスすることができます。
簡単な例を以下に示します。
define adder
print $arg0 + $arg1 + $arg2
このコマンドを実行するには、以下のようにします。
adder 1 2 3
上の例では、
adderというコマンドを定義しています。
このコマンドは、
3つの引数の合計を表示します。
引数は文字列で代用されますので、
変数を参照することもできますし、
複雑な式を使うこともできます。
また、
下位関数の呼び出しを行うこともできます。
define commandnameコマンドの定義は、
defineコマンドに続いて与えられる、
他のGDBコマンド行から構成されます。
これらのコマンドの末尾は、
endを含む行によって示されます。
ifelse行が続くことがあり、
この場合は、
else行の後に、
式の評価結果が偽であった場合にだけ実行される一連のコマンドが続きます。
末尾は、
endを含む行によって示されます。
whileifと似ています。
引数として、
評価の対象となる式を1つだけ取ります。
その後には、
実行されるべきコマンドが1行に1つずつ続き、
最後にendがなければなりません。
コマンドは、
式の評価結果が真である限り、
繰り返し実行されます。
document commandnamehelpコマンドによってアクセスできます。
コマンドcommandnameは既に定義済みでなければなりません。
このコマンドは、
defineコマンドが一連のコマンド定義を読み込むのと同様に、
endで終わる一連のドキュメントを読み込みます。
documentコマンドの実行が完了すると、
コマンドcommandnameに対してhelpコマンドを実行すると、
ユーザの記述したドキュメントが表示されます。
documentコマンドを再度実行することによって、
コマンドのドキュメントを変更することができます。
defineコマンドによってコマンドを再定義しても、
ドキュメントは変更されません。
help user-definedshow usershow user commandnameユーザ定義コマンドが実行されるときに、 定義内のコマンドは表示されません。 定義内のコマンドがどれか1つでもエラーになると、 ユーザ定義コマンドの実行が停止されます。
対話的に使われている場合には確認を求めてくるようなコマンドも、 ユーザ定義コマンドの内部で使われている場合には確認を求めることなく処理を継続します。 通常は実行中の処理に関してメッセージを表示するGDBコマンドの多くが、 ユーザ定義コマンドの中から呼び出されている場合にはメッセージを表示しません。