11. 前もって用意されたコマンド手順
GDB は、実行するコマンドの手順をユニットとして記憶するための2つの方法を
提供しています:
それは、ユーザ定義コマンドとコマンドファイルです。
ユーザ定義コマンドとは、GDB のコマンドの手順を、あなたが新しい
コマンドとして定義したものです。これは、`define' コマンドで実行
できます。
- define commandname
-
commandname という名称のコマンドを定義します。
もし、既に定義済のコマンドが存在する場合は、それを再定義したいのか
どうかの確認を求められます。
コマンドの定義は、`define' コマンドの後に続く、他の GDB の
コマンドラインによって行われます。これらのコマンドの最後は、`end'
を含む行によってマークされます。
- document commandname
-
ユーザ定義の commandname のドキュメンテーションを行います。
commandname のコマンドは、既に定義されている必要があります。
このコマンドは、`define' コマンドが `end' が表れるまで
コマンド定義の行を読み込むのと同様、ドキュメンテーションの行を
読み込みます。
`document' コマンドの定義終了後、commandname に対する
`help' によって、あなたの記述したドキュメンテーションが表示
されます。
あなたは、コマンドのドキュメンテーションを変更するために
`document' コマンドを使用することができます。
`define' によるコマンドの再定義は、ドキュメンテーションを変更
しません。
ユーザ定義のコマンドは引数を受け付けません。また、これらが実行された時、
コマンドの定義内容は表示されません。任意のエラーはユーザ定義コマンドの
実行を停止させます。
対話的に処理されている時に確認を求めてくるコマンドは、ユーザ定義
コマンドの中で使われた場合、確認を求めてきません。多くの GDB の
コマンドは、通常、今何をやっているのかというメッセージを表示しますが、
ユーザ定義コマンドの中で使用された場合はメッセージを省略します。
GDB のコマンドファイルとは、GDB のコマンドを行として持つファイルのこと
です。コメント (`#' ではじまる行) もまた含まれます。
コマンドファイル内の空行は何も行いません;
これは、端末で行った場合のように、最後のコマンドを繰り返したりはしません。
GDB が起動した時、GDB は、その初期化ファイルである
`.gdbinit'
という名称のコマンドファイルを自動的に実行します。
GDB は初期化ファイルを (もしあれば) あなたのホームディレクトリから
読み込み、(もしあれば) カレント・ワーキングディレクトリからも読み込み
ます。(もし、`-nx' オプションが指定されていたならは、初期化
ファイルは実行されません。) あなたは、また、
`source' コマンドによって、コマンドファイルの実行をリクエスト
することができます:
- source filename
-
filename というコマンドファイルを実行します。
コマンドファイル上の行はシーケンシャルに実行されます。
実行されるコマンドの内容は、実行中に表示されません。
どこかのコマンドでエラーが発生した場合、
コマンドファイルの実行は中止されます。
対話的に処理されている時に確認を求めてくるコマンドは、コマンドファイルの
中で使われた場合、確認を求めてきません。GDB の多くのコマンドは、通常、
今何をやっているのかというメッセージを表示しますが、コマンドファイルの
中で使用された場合、メッセージを省略します。
コマンドファイルやユーザ定義コマンドの実行中、表示される唯一の出力は、
定義されたコマンドによって明白に表示されるものだけです。この章では、
あなたが出力として明白に生成したいと思う場合に便利な3つのコマンドを
説明します。
- echo text
-
text を表示します。表示できない文字は、`\n' が
ニューラインを表示するように、C言語のエスケープシーケンスによって
text の中で表現されます。あなたが明白に記述しない限り、
ニューラインは絶対に表示されません。C言語の標準エスケープシーケンスに
加えて、バックスラッシュの後に続くスペースはスペースを意味します。
これは、通常、全ての引数の最初と最後にある空白は切り取られて
しまうので、文字列の最初や最後にスペースを出力する時に便利です。
従って、“and foo = ”と表示するには、
“echo \ and foo = \ ”というコマンドの使い方をします。
text の最後にあるバックスラッシュは、C言語と同様、その後に続く
行の継続を行います。例えば、
echo This is some text\n\
which is continued\n\
onto several lines.\n
は、次の場合と同様の出力を行います。
echo This is some text\n
echo which is continued\n
echo onto several lines.\n
- output expression
-
expression の値を表示しますが、値だけを表示します:
ニューラインも `$nn = ' も表示しません。また、値は
変数履歴に記録されません。式についての詳しい説明は、“8.1 式”を参照して下さい。
- output/fmt expression
-
fmt に従って、expression の値を表示します。
詳しくは、“8.5 出力フォーマット”を参照して下さい。
- printf string, expressions...
-
string の制御に従って、expressions の値を表示します。
expressions はカンマで分けられ、数字かポインタである必要があります。
これらの値は、プログラムが
printf (string, expressions...);
を実行する場合と同様に、指定された string に従って表示されます。
例えば、あなたは2つの値を次のようにして16進数で表示することができます:
printf "foo, bar-foo = 0x%x, 0x%x\n", foo, bar-foo
あなたがこの文字列の中で使うことができるバックスラッシュによる
エスケープシーケンスは、バックスラッシュの後に1文字続く単純なもの
だけです。
目次に戻る