GDB(1)

名前
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 コマンドには以下のようなものがあります。

break [file:]function
    プレークポイントを (file 内の) function に設定します。

run [arglist]
    プログラムの実行を開始します (もしあれば arglist を引数として)。

bt  バックトレース: プログラムのスタックを表示します。

print expr
    式の値を表示します。

c   プログラムの実行を再開します (たとえばブレークポイントで実行を中断した後)。

next
    次のプログラム行を実行します (停止状態の後)。 その行内のすべての関数は 1 ステップで実行されます。

edit [file:]function
    現在中断している場所のプログラム行をエディターで開きます。

list [file:]function
    現在中断している場所の近辺のプログラムソースを表示します。

step
    次のプログラム行を実行します (停止状態の後)。 もしその行に関数が含まれていれば、その関数内をステップ実行していきます。

help [name]
    GDB コマンド name についての情報や、 GDB を使う上での一般的な情報を表示します。

quit
    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 オプションで指定するファイルと同じになります。 また、もしも2番目があれば、 -c オプションで指定するファイルと同じになります。 オプションの多くは、 長い表記法と短い表記法の両方で指定することができますが、 ここではその両方を示します。 長い表記法は、 どのオプションであるのかが明確であれば、 短く切り詰めても構いません。 (好みにより - の代わりに + が使用できますが、ここではよく用いられる表記で記します。)

すべてのオプションとコマンドライン引数は、 指定した順番に処理されます。 -x オプションが使用されると、 この順番は変わります。

-help
-h  短い説明つきで、 すべてのオプションを表示します。

-symbols=file
-s file
    シンボルテーブルをファイル file から読みます。

-write
    実行ファイルやコアファイルへの書き込みを有効にします。

-exec=file
-e file
    ファイル file を実行可能ファイルとして利用します。 core dump と連係して pure data を調べるのにも用いられます。

-se=file
    ファイル file からシンボルテーブルを読み、 同時にそれを実行可能ファイルとして利用します。

-core=file
-c file
    ファイル file を core dump として利用します。

-command=file
-x file
    ファイル file から GDB のコマンドを読み込み、実行します。

-ex command
    指定された GDB command を実行します。

-directory=directory
-d directory
    ソースファイルを探す検索パスに directory を追加します。

-nh ~/.config/gdb/gdbinit、 ~/.gdbinit、 ~/.config/gdb/gdbearlyinit、 ~/.gdbearlyinit の各ファイルから、 コマンドを実行しません。

-nx
-n  ~/.gdbinit または .gdbearlyinit の初期化ファイルからコマンド実行しません。

-quiet
-q  起動時のメッセージおよび copyright を表示しません。 これらのメッセージはバッチモードでも抑制されます。

-batch
    バッチモードで動作します。 -x で指定したファイル (および抑制されていなければ .gdbinit ファイル) 内の全てのコマンドを処理した後、戻り値として 0 を返して終了します。 コマンドファイル内の GDB コマンドの実行中にエラーが生じた場合は、 0 以外の値で終了します。

    バッチモードは GDB をフィルタとして実行する場合、 たとえばプログラムをダウンロードして別のコンピュータ上で実行したりする場合 に便利です。 以下のメッセージ

     Program exited normally. (プログラムは正常に終了しました。)

    は通常、GDB の制御端末上で実行されるプログラムが終了するたびに 出力されるものですが、 バッチモードではこのようなメッセージは出力されません。

-cd=directory
    カレントディレクトリの代わりに directory を GDB の作業用ディレクトリとして実行します。

-fullname
-f  Emacs が GDB をサブプロセスとして実行する際に、 このオプションを付加します。 このとき GDB は、スタックフレームが表示されるたびに (プログラムが中断するたびに)、 完全なファイル名と行番号を標準的な認識しやすい形式で表示します。 この表示書式は 2 つの 32 文字、ファイル名、行番号とコロンで区切られた文字位置、改行の順になっています。 これは Emacs-GDB インタフェースプログラムにおいて、 フレームに対応するソースコードを表示するために 2 つの 32 文字を使うことになっているからです。

-b bps
    リモートデバッグ用に GDB が利用するシリアルインタフェースの回線速度を (ボーレートまたはビット/秒で) 設定します。

-tty=device
    プログラムの標準入出力に 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."