本章では、 GDBの起動方法、 終了方法を説明します。 基本は、 以下の2つです。
gdb
というプログラムを実行することで、
GDBが起動されます。
ひとたび起動されると、
GDBは終了を指示されるまで、
端末からのコマンド入力を受け付けます。
あるいは、
最初からGDBのデバッグ環境を指定するために、
さまざまな引数やオプションを指定して
gdb
プログラムを実行することもできます。
ここで説明するコマンドライン・オプションは、 さまざまな状況に対応するために設計されたものです。 環境によっては、 ここで説明するオプションのいくつかは、 事実上使用できない場合もあります。
GDBの最も基本的な起動方法は、 デバッグされる実行プログラムの名前を引数に指定することです。
gdb program
起動時に、 実行プログラム名とともに、 コア・ファイルの名前を指定することもできます。
gdb program core
あるいは、 既に実行中のプロセスをデバッグする場合には、 そのプロセスIDを第2引数に指定することもできます。
gdb program 1234
ここでは、
GDBはプロセスID 1234
のプロセスにアタッチします
(ただし、
`1234'という名前のファイルが存在しないというのが条件です。
GDBは、
まずコア・ファイルの存在を確認します)。
このような第2引数の利用が可能であるためには、 かなり完成されたオペレーティング・システムが必要になります。 ボード・コンピュータに接続して、 リモート・デバッガとしてGDBを使用する場合には、 そもそも「プロセス」という概念がないかもしれませんし、 多くの場合、 コア・ダンプというものもないでしょう。 プロセスへのアタッチやコア・ダンプの読み取りが不可能な場合、 GDBは警告を出力します。
gdb
を起動すると、
GDBの無保証性を説明する文章が表示されますが、
-silent
オプションを指定することで、
これを表示しないようにすることもできます。
gdb -silent
コマンドライン・オプションを指定することで、 GDBの起動方法をさらに制御することができます。 GDB自身に、 使用可能なオプションを表示させることができます。
gdb -help
のようにgdbプログラムを実行することで、 使用可能なオプションがすべて、 その使用方法についての簡単な説明付きで表示されます (短縮して、 `gdb -h'という形で実行しても同じ結果が得られます)。
ユーザの指定したすべてのオプションとコマンドライン引数は、 順番に処理されます。 `-x'オプションが指定されている場合は特別で、 順序の違いに意味がでてきます。
起動されたGDBは、 指定された引数のうちオプション以外のものは、 実行ファイル名およびコア・ファイル名 (あるいはプロセスID) であると解釈します。 これは、 `-se'オプションと`-c'オプションが指定されたのと同じことです (GDBは、 対応するオプション・フラグを持たない最初の引数を`-se'オプション付きと同等とみなし、 同じく対応するオプション・フラグを持たない第2の引数があれば、 これを`-c'オプション付きと同等とみなします)。
例えばほとんどの組み込みターゲット用の場合のように、 configureによってコア・ファイルのサポートを含むように構成されていない場合、 GDBは、 このような第2引数が存在するとメッセージを出力してそれを無視します。
多くのオプションには、 完全形と短縮形があります。 以下の一覧では、 その両方を示します。 オプション名は、 他のオプションと区別がつけば、 最後まで記述しなくても、 GDBによって正しく認識されます (オプション名には`-'ではなく`--'を使うことも可能ですが、 ここでは一般的な慣例にしたがうこととします)。
-symbols file
-s file
-exec file
-e file
-se file
-core file
-c file
-c number
attach
コマンドを実行するのと同等です
(ただし、
コア・ダンプ形式のファイルがnumberで指定される名前で存在する場合は、
そのファイルを読み取るべきコア・ダンプとして指定したことになります)。
-command file
-x file
-directory directory
-d directory
-m
-mapped
mmap
システム・コールによるファイルのメモリへのマッピングが使用可能である場合、
このオプションを使うことで、
プログラムのシンボル情報を再利用可能なファイルとしてカレント・ディレクトリに書き出させることができます。
仮にデバッグ中のプログラム名が`/tmp/fred'であるとすると、
マップされたシンボル・ファイルは`/tmp/fred.syms'となります。
この後のGDBデバッグ・セッションは、
このファイルの存在を検出し、
そこから迅速にシンボル情報をマップします。
この場合、
実行プログラムからシンボル情報を読み込むことはありません。
`.syms'ファイルは、
GDBが実行されるホスト・マシンに固有のものです。
このファイルは、
GDB内部のシンボル・テーブルのイメージをそのまま保存したものです。
これを、
複数のホスト・プラットフォーム上において、
共有することはできません。
-r
-readnow
-mapped
オプションと-readnow
オプションは、
完全なシンボル情報を含む`.syms'ファイルを作成するために、
通常は一緒に指定されます
(`.syms'ファイルに関する情報については、
ファイルを指定するコマンド
を参照してください)。
後に使用する目的で`.syms'を作成するだけで、
それ以外には何もしないようにするためのGDBの単純な起動方法は、
以下のとおりです。
gdb -batch -nx -mapped -readnow programname
GDBを様々なモードで実行することが可能です。 例えば、 batchモードやquietモードなどがあります。
-nx
-n
-quiet
-silent
-q
-batch
0
で終了します
(`-n'オプションによって禁止されていなければ、
初期化ファイル内に記述されているすべてのコマンドも実行されます)。
コマンド・ファイルに記述されたGDBコマンドの実行中にエラーが発生した場合には、
0
以外の終了コードで終了します。
batchモードはGDBをフィルタとして実行する場合に便利です。
例えば、
あるプログラムを別のコンピュータ上にダウンロードして実行する場合などです。
このような使い方の邪魔にならないよう、
Program exited normally.というメッセージは、 batchモードでは表示されません (通常このメッセージは、 GDBの管理下で実行中のプログラムが終了するときに、 必ず表示されます)。
-nowindows
-nw
-windows
-w
-cd directory
-fullname
-f
-epoch
-annotate level
-async
-noasync
-baud bps
-b bps
-tty device
-t device
-interpreter interp
-write
-statistics
-version
quit [expression]
q
quit
コマンド
(省略形はq
)
を使用するか、
あるいは、
EOF
(通常はC-d)
を入力します。
expressionを指定しない場合、
GDBは正常終了します。
expressionが指定された場合、
expressionの評価結果をエラー・コードとして終了します。
割り込み (多くの場合C-c) はGDBを終了させません。 割り込みは通常、 実行中のGDBコマンドを終了させ、 GDBのコマンド・レベルに復帰させます。 割り込み文字は、 いつ入力しても安全です。 というのは、 割り込みの発生が危険である間は、 GDBが割り込みの発生を抑止するからです。
アタッチされたプロセスやデバイスを制御するために
GDBを使用していた場合、
detach
コマンドでそれを解放することができます
(既に実行中のプロセスのデバッグ参照)。
デバッグ・セッションの途中でシェル・コマンドを実行する必要がある場合、
GDBを終了したり一時停止させたりする必要はありません。
shell
コマンドを使用することができます。
shell command string
SHELL
環境変数が設定されていれば、
その値が実行されるべきシェルを決定します。
SHELL
環境変数が設定されていなければ、
GDBはデフォルト・シェル
(UNIXシステムでは/bin/sh
、
MS-DOSでは`COMMAND.COM'、
等)
を使用します。
開発環境ではしばしばmake
ユーティリティが必要とされます。
GDB内部でmake
ユーティリティを使用する場合は、
shell
コマンドを使用する必要はありません。
make make-args
make
プログラムを実行します。
これは、
`shell make make-args'を実行するのと同じことです。