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