[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を起動すると、 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
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'であるとすると、 マップされたシンボル・ファイルは`/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
初期化ファイルに記述されたコマンドを実行しません (通常、 初期化ファイルは`.gdbinit'という名前です。 ただし、 PC上では`gdb.ini'となります)。 通常は、 すべてのコマンド・オプションと引数を処理した後に、 GDBは初期化ファイル内のコマンドを実行します。 コマンド・ファイル を参照してください。
-quiet
-silent
-q
紹介メッセージおよびコピーライト・メッセージを表示しません。 これらのメッセージは、 batchモードでも表示されません。
-batch
batchモードで実行されます。 `-x'オプションで指定されたすべてのコマンド・ファイルを処理した後、 終了コード0で終了します (`-n'オプションによって禁止されていなければ、 初期化ファイル内に記述されているすべてのコマンドも実行されます)。 コマンド・ファイルに記述されたGDBコマンドの実行中にエラーが発生した場合には、 0以外の終了コードで終了します。 batchモードはGDBをフィルタとして実行する場合に便利です。 例えば、 あるプログラムを別のコンピュータ上にダウンロードして実行する場合などです。 このような使い方の邪魔にならないよう、
Program exited normally.
というメッセージは、 batchモードでは表示されません (通常このメッセージは、 GDBの管理下で実行中のプログラムが終了するときに、 必ず表示されます)。
-nowindows
-nw
非ウィンドウ・モード。 GDBにGUIが組み込まれている場合、 このオプションはGDBに対して、 コマンドライン・インターフェイスだけを使うよう指示します。 GUIが利用可能ではない場合、 このオプションは何の効果も持ちません。
-windows
-w
GDBにGUIが組み込まれている場合、 このオプションは、 可能であればGUIを使うよう要求します。
-cd directory
カレント・ディレクトリではなく、 directoryで指定されたディレクトリを作業ディレクトリとして、 GDBを実行します。
-fullname
-f
GNU EmacsがGDBをサブ・プロセスとして実行するとき、 このオプションをセットします。 このオプションは、 スタック・フレームを表示するときには、 必ず完全なファイル名と行番号を標準的な認識可能な書式で出力するようGDBに対して指示するものです (スタック・フレームは、 プログラムの実行が停止されたときに必ず表示されます)。 認識可能な書式とは、 先頭に2つの`\032'文字、 続いてコロンで区切られたファイル名、 行番号、 桁位置、 最後に改行、 というものです。 Emacs-GDBインターフェイス・プログラムは、 フレームに対応するソース・コードを表示させる命令として、 2つの`\032'文字を使用します。
-epoch
Epoch Emacs-GDBインターフェイスは、 GDBをサブ・プロセスとして実行するときに、 このオプションをセットします。 Epochが式の値を別ウィンドウ上において表示することができるように、 GDBが表示ルーチンを変更するよう通知します。
-annotate level
このオプションはGDB内部の註釈レベルをセットします。 その効果は`set annotate level'を使うことと同じです。 (GDB註釈参照)。 註釈レベルは、 GDBがプロンプトとともにどれだけの情報を表示するかを制御するものです。 例えば、 式の値、 ソース行、 その他の出力です。 レベル0が通常のレベルです。 レベル1は、 GDBがGNU Emacsのサブ・プロセスとして実行されるときに使われます。 レベル2は、 GDBを制御するプログラムに適切な最大限の註釈を表示します。
-async
コマンドライン・インターフェイスにおいて非同期イベント・ループを使用します。 GDBは、 ユーザのキーボード入力などのすべてのイベントを、 特別なイベント・ループを使って処理します。 これによりGDBは、 デバッグされているプロセスの実行と並行して、 ユーザ・コマンドを受け付けて処理することができるようになります。(1) したがってユーザは、 次のコマンドを入力するのに、 制御がGDBに戻るまで待つ必要はありません。 (注:バージョン5.0においては、 この非同期オペレーションのターゲット側の部分がまだ実装されていないため、 `-async'は完全には機能しません。) 標準入力が端末装置に接続されている場合、 GDBは、 `-noasync'オプションによって抑止されていない限り、 デフォルトで非同期イベント・ループを使います。
-noasync
コマンドライン・インターフェイスにおいて非同期イベント・ループを抑止します。
-baud bps
-b bps
GDBによってリモート・デバッグ用に使用されるシリアル・インターフェイスの回線速度 (ボーレート、 あるいは、 秒あたりのビット数) を設定します。
-tty device
-t device
プログラムの標準入力および標準出力としてdeviceを使用して実行します。
-interpreter interp
制御プログラムや制御デバイスとのインターフェイスに、 interpによって指定されるインタープリタを使用します。 このオプションは、 GDBをバックエンドとして使用しながらGDBと通信するプログラムによってセットされることを意図したものです。 例えば、 `--interpreter=mi'を指定すると、 GDBはgdbmiインターフェイスを使用するようになります (GDB/MIインターフェイス参照)。
-write
実行ファイルとコア・ファイルを読み書き両用モードでオープンします。 これは、 GDB内において`set write on'コマンドを実行することと同等です (プログラムへのパッチ適用参照)。
-statistics
このオプションを指定するとGDBは、 個々のコマンドの実行を完了してプロンプトに復帰する前に、 消費時間とメモリ使用に関する統計情報を表示するようになります。
-version
このオプションを指定するとGDBは、 バージョン番号と無保証性に関する宣言を表示した後に終了します。

GDBの終了

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

割り込み (多くの場合C-c) はGDBを終了させません。 割り込みは通常、 実行中のGDBコマンドを終了させ、 GDBのコマンド・レベルに復帰させます。 割り込み文字は、 いつ入力しても安全です。 というのは、 割り込みの発生が危険である間は、 GDBが割り込みの発生を抑止するからです。

アタッチされたプロセスやデバイスを制御するために GDBを使用していた場合、 detachコマンドでそれを解放することができます (既に実行中のプロセスのデバッグ参照)。

シェル・コマンド

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

shell command string
command stringで指定されるコマンド文字列を実行するために標準シェルを起動します。 SHELL環境変数が設定されていれば、 その値が実行されるべきシェルを決定します。 SHELL環境変数が設定されていなければ、 GDBはデフォルト・シェル (UNIXシステムでは/bin/sh、 MS-DOSでは`COMMAND.COM'、 等) を使用します。

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

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


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