[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]  


GDBの起動・終了

本章では、 GDBの起動方法、 終了方法を説明します。 基本は、 以下の2つです。

GDBの起動

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の無保証性を説明する文章が表示されますが、 -silentオプションを指定することで、 これを表示しないようにすることもできます。

gdb -silent

コマンドライン・オプションを指定することで、 GDBの起動方法をさらに制御することができます。 GDB自身に、 使用可能なオプションを表示させることができます。

gdb -help

のようにgdbプログラムを実行することで、 使用可能なオプションがすべて、 その使用方法についての簡単な説明付きで表示されます (短縮して、 `gdb -h'という形で実行しても同じ結果が得られます)。 ユーザの指定したすべてのオプションと引数は、 順番に処理されます。 `-x'オプションが指定されている場合は特別で、 順序の違いに意味がでてきます。

ファイルの選択

起動されたGDBは、 指定された引数のうちオプション以外のものは、 実行ファイル名およびコア・ファイル名 (あるいはプロセスID) であると解釈します。 これは、 `-se'オプションと`-c'オプションが指定されたのと同じことです (GDBは、 対応するオプション・フラグを持たない最初の引数を`-se'オプション付きと同等とみなし、 同じく対応するオプション・フラグを持たない第2の引数があれば、 これを`-c'オプション付きと同等とみなします)。 多くのオプションには、 完全形と短縮形があります。 以下の一覧では、 その両方を示します。 オプション名は、 他のオプションと区別がつけば、 最後まで記述しなくても、 GDBによって正しく認識されます (オプション名には`-'ではなく`--'を使うことも可能ですが、 ここでは一般的な慣例にしたがうこととします)。

-symbols file
-s file
fileで指定されるファイルからシンボル・テーブルを読み込みます。
-exec file
-e file
可能であれば、 fileで指定されるファイルを、 実行ファイルとして使います。 また、 このファイルを、 コア・ダンプとともにデータを解析するために使います。
-se file
fileで指定されるファイルからシンボル・テーブルを読み込み、 かつ、 このファイルを実行ファイルとして使います。
-core file
-c file
fileで指定されるファイルを解析すべきコア・ダンプとして使います。
-c number
numberで指定されるプロセスIDを持つプロセスに接続します。 これは、 attachコマンドを実行するのと同等です (ただし、 numberで指定される名前のコア・ダンプ形式のファイルが存在する場合は、 そのファイルをコア・ダンプとして読み込みます)。
-command file
-x file
fileで指定されるファイル内に記述されたGDBコマンドを実行します。 コマンド・ファイルを参照してください。
-directory directory
-d directory
ソース・ファイルを検索するパスにdirectoryで指定されるディレクトリを追加します。
-m
-mapped
注意: このオプションは、 すべてのシステムでサポートされているわけではない、 オペレーティング・システムのある機能に依存しています。
システム上で、 mmapシステム・コールによるファイルのメモリへのマッピングが使用可能である場合、 このオプションを使うことで、 プログラムのシンボル情報を再利用可能なファイルとしてカレント・ディレクトリに書き出させることができます。 仮にデバッグ中のプログラム名が`/tmp/fred'であるとすると、 マップされたシンボル・ファイルは`./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
初期化ファイルに記述されたコマンドを実行しません (通常、 初期化ファイルは`.gdbinit'という名前です。 ただし、 PC上では`gdb.ini'となります)。 通常は、 すべてのコマンド・オプションと引数が処理された後に、 初期化ファイル内のコマンドが実行されます。 コマンド・ファイルを参照してください。
-quiet
-q
紹介メッセージおよびコピーライト・メッセージを表示しません。 これらのメッセージは、 batchモードでも表示されません。
-batch
batchモードで実行されます。 `-x'オプションで指定されたすべてのコマンド・ファイルを処理した後、 終了コード0で終了します (`-n'オプションによって禁止されていなければ、 初期化ファイル内に記述されているすべてのコマンドも実行されます)。 コマンド・ファイルに記述されたGDBコマンドの実行中にエラーが発生した場合には、 0以外の終了コードで終了します。 batchモードはGDBをフィルタとして実行する場合に便利です。 例えば、 あるプログラムを別のコンピュータ上にダウンロードして実行する場合などです。 このような使い方の邪魔にならないよう、
Program exited normally.
というメッセージは、 batchモードでは表示されません (通常このメッセージは、 GDBの管理下で実行中のプログラムが終了するときに、 必ず表示されます)。
-cd directory
カレント・ディレクトリではなく、 directoryで指定されたディレクトリを作業ディレクトリとして、 GDBを実行します。
-fullname
-f
GNU EmacsがGDBをサブ・プロセスとして起動するとき、 このオプションを指定します。 このオプションは、 スタック・フレームを表示するときには、 必ず完全なファイル名と行番号を標準的な認識可能な書式で出力するようGDBに対して指示するものです (スタック・フレームは、 例えば、 プログラムの実行が停止されたときに必ず表示されます)。 認識可能な書式とは、 先頭に2つの`\032'文字、 続いてコロンで区切られたファイル名、 行番号、 桁位置、 最後に改行、 というものです。 Emacs-GDBインターフェイス・プログラムは、 フレームに対応するソース・コードを表示させる命令として、 2つの`\032'文字を使用します。
-b bps
GDBによってリモート・デバッグ用に使用されるシリアル・インターフェイスの回線速度 (ボーレートあるいはBPS) を設定します。
-tty device
プログラムの標準入力および標準出力としてdeviceを使用して実行します。

GDBの終了

quit
GDBを終了するためには、 quitコマンド (省略形はq) を使用するか、 あるいは、 ファイルの終端文字 (通常はC-d) を入力します。 expressionを指定しない場合、 GDBは正常終了します。 expressionが指定された場合、 expressionの評価結果をエラー・コードとして終了します。

割り込み (多くの場合C-c) はGDBを終了させません。 割り込みは通常、 実行中のGDBコマンドを終了させ、 GDBのコマンド・レベルに復帰させます。 割り込み文字は、 いつ入力しても安全です。 というのは、 割り込みの発生が危険である間は、 GDBが割り込みの発生を抑止するからです。 アタッチされたプロセスやデバイスを制御するために GDBを使用していた場合、 detachコマンドでそれを解放することができます (既に実行中のプロセスのデバッグを参照)。

シェル・コマンド

デバッグ・セッションの途中でシェル・コマンドを実行する必要がある場合、 GDBを終了したり一時停止させたりする必要はありません。 shellコマンドを使用することができます。

shell command string
command stringで指定されるコマンド文字列を実行するために標準シェルを起動します。 SHELL環境変数が設定されていれば、 その値が実行されるべきシェルを決定します。 SHELL環境変数が設定されていなければ、 GDBは/bin/shを実行します。

開発環境ではしばしばmakeユーティリティが必要とされます。 GDB内部でmakeユーティリティを使用する場合は、 shellコマンドを使用する必要はありません。

make make-args
make-argsで指定される引数とともにmakeプログラムを実行します。 これは、 `shell make make-args'を実行するのと同じことです。


[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]