gdb - GNU デバッガー
gdb [-help] [-nh] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog] [-c core] [-p procID] [-x cmds] [-d dir] [prog|prog procID|prog core]
GDB をはじめとするデバッガーは、プログラムが実行中またはクラッシュした時に、 そのプログラムの「内部」で何が行なわれているか/行われていたかを調べるのに使用されます。
GDB は、4 つの機能 (加えてこれらをサポートする機能) によって 実行中にバグを見つけることを手助けします。
プログラムの動作を詳細に指定してプログラムを実行させる。
指定した条件でプログラムを停止させる。
プログラムが止まった時に、何が起こったか調べる。
バグによる副作用を修正し、別のバグを調べるためプログラムの状態を変更する。
GDB では C, C++, Fortran, Modula-2 で書かれたプログラムのデバッグが行なえます。
GDB はシェルコマンド gdb
で起動されます。
いったん起動すると、GDB コマンド quit
を実行して終了するまで、 端末からコマンドを読み続けます。 GDB
のオンラインヘルプは、GDB の中から help
コマンドを実行して見ることができます。
gdb
は引数やオプション無しで起動できますが、 たいていは
1 つか 2 つの引数をつけて起動します。
実行プログラムを引数にする場合は以下のようにします。
gdb program
また実行プログラムと core ファイルの両方を指定することもできます。
gdb program core
もし実行中のプロセスのデバッグを行ないたい場合には、 第 2 引数として
core の代わりにプロセス ID を指定するか、あるいはオプション
-p
を用います:
gdb program 1234 gdb -p 1234
こうすれば GDB をプロセス 1234
にアタッチできます。
-p を用いる場合は、 program
のファイル名は省略することができます。
よく利用される GDB コマンドには以下のようなものがあります。
プレークポイントを (file 内の) function に設定します。
プログラムの実行を開始します (もしあれば arglist を引数として)。
バックトレース: プログラムのスタックを表示します。
式の値を表示します。
プログラムの実行を再開します (たとえばブレークポイントで実行を中断した後)。
次のプログラム行を実行します (停止状態の後)。 その行内のすべての関数は 1 ステップで実行されます。
現在中断している場所のプログラム行をエディターで開きます。
現在中断している場所の近辺のプログラムソースを表示します。
次のプログラム行を実行します (停止状態の後)。 もしその行に関数が含まれていれば、その関数内をステップ実行していきます。
GDB コマンド name についての情報や、 GDB を使う上での一般的な情報を表示します。
GDB. を終了します。
GDB の詳細については Using GDB: A Guide to the GNU
Source-Level Debugger, by Richard M. Stallman and Roland H. Pesch
を参照して下さい。 同じテキストは、 info
プログラム内の
gdb
エントリからオンラインで参照できます。
オプション以外の引数は、 実行ファイルと core ファイル (またはプロセス ID) を表します。 つまりオプションフラグと関連づいていない最初の引数は、 -se オプションで指定するファイルと同じになります。 またそれがもう一つあれば、 -c オプションで指定するファイルと同じになります。 オプションの多くは、 長い表記法と短い表記法の両方で指定することができますが、 ここではその両方を示します。 長い表記法は、 どのオプションであるのかが明確であれば、 短く切り詰めても構いません。 (好みにより - の代わりに + が使用できますが、ここではよく用いられる表記で記します。)
すべてのオプションとコマンドライン引数は、 指定した順番に処理されます。 -x オプションが使用されると、 この順番は変わります。
短い説明つきで、 すべてのオプションを表示します。
シンボルテーブルをファイル file から読みます。
実行ファイルやコアファイルへの書き込みを有効にします。
ファイル file を実行可能ファイルとして利用します。 core dump と連係して pure data を調べるのにも用いられます。
ファイル file からシンボルテーブルを読み、 同時にそれを実行可能ファイルとして利用します。
ファイル file を core dump として利用します。
ファイル file から GDB のコマンドを読み込み、実行します。
指定された GDB command を実行します。
ソースファイルを探す検索パスに directory を追加します。
~/.config/gdb/gdbinit、 ~/.gdbinit、 ~/.config/gdb/gdbearlyinit、 ~/.gdbearlyinit の各ファイルから、 コマンドを実行しません。
~/.gdbinit または .gdbearlyinit の初期化ファイルからコマンド実行しません。
起動時のメッセージおよび copyright を表示しません。 これらのメッセージはバッチモードでも抑制されます。
バッチモードで動作します。 -x で指定したファイル
(および抑制されていなければ .gdbinit ファイル)
内の全てのコマンドを処理した後、戻り値として 0
を返して終了します。 コマンドファイル内の GDB
コマンドの実行中にエラーが生じた場合は、 0 以外の値で終了します。
バッチモードは GDB をフィルタとして実行する場合、
たとえばプログラムをダウンロードして別のコンピュータ上で実行したりする場合
に便利です。 以下のメッセージ Program exited normally.
(プログラムは正常に終了しました。) は通常、GDB
の制御端末上で実行されるプログラムが終了するたびに
出力されるものですが、
バッチモードではこのようなメッセージは出力されません。
カレントディレクトリの代わりに directory を GDB の作業用ディレクトリとして実行します。
Emacs が GDB をサブプロセスとして実行する際に、 このオプションを付加します。 このとき GDB は、スタックフレームが表示されるたびに (プログラムが中断するたびに)、 完全なファイル名と行番号を標準的な認識しやすい形式で表示します。 この表示書式は 2 つの 32 文字、ファイル名、コロンで区切られた行番号と文字位置、改行の順になっています。 これは Emacs-GDB インタフェースプログラムにおいて、 フレームに対応するソースコードを表示するために 2 つの 32 文字を使うことになっているからです。
リモートデバッグ用に GDB が利用するシリアルインタフェースの転送速度を (ボーレートまたはビット/秒で) セットします。
プログラムの標準入出力に device を利用します。
GDB の完全なドキュメントは Texinfo
マニュアルとしてメンテナンスされています。info
と
gdb
の両プログラム、および GDB の Texinfo
ドキュメントが適切にインストールされていれば、以下のコマンド
info gdb
を実行して完全なマニュアルを参照できます。
Using GDB: A Guide to the GNU Source-Level Debugger, Richard M. Stallman and Roland H. Pesch, July 1991.
Copyright (c) 1988-2022 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being Free Software and Free Software Needs Free Documentation, with the Front-Cover Texts being A GNU Manual, and with the Back-Cover Texts as in (a) below.
(a) FSF の裏表紙には、 以下の文章が記述されています: You are free to copy and modify this GNU Manual. Buying copies from GNU Press supports the FSF in developing GNU and promoting software freedom.