gdb

gdbとは

gdb(GNU debugger)とは、プログラムの動作をソースコードのレベルで解析できるデバッグソフトウェアです。

ソースコードの表示、ブレークポイントの設定、スタック内容の表示、変数やメモリ領域の表示および設定などが行えます。


gdbの使用方法

コンパイル時にgdbオプションを設定する。

gccでコンパイルする際、gdbを使用するためのデバッグ情報付加オプション「-g」を設定する必要があります。

「-g」オプションによってデバッグのための情報分、実行ファイルのサイズが大きくなります。


$ gcc -g -o 実行ファイル ソースコード

gdbを起動する

実行ファイルを引数に指定して実行します。

実行すると、「(gdb)」プロンプトが表示されます。


$ gdb 実行ファイル
GNU gdb ...(略)

(gdb)

gdb操作

ヘルプの表示

helpを入力すると、gdb全体のヘルプを表示します。

特定のコマンドcommandを指定すると、そのコマンドのヘルプを表示します。


(gdb) help [command]

プログラムの実行と終了

デバッグ対象プログラム(実行ファイル)を実行します。

argsでコマンドライン引数を指定可能です。詳細はマニュアルを確認してください。

また、入出力リダイレクションも使用することも可能です。


(gdb) run [args]

gdbを終了する。


(gdb) quit

デバッグポイント(デバッグ対象位置)の移動

デバッグポイントを次の行に移動します。ただし、関数の中の処理は追いません。

「n」は「next」の省略形です。


(gdb) n

デバッグポイントを次の行に移動します。

デバッグポイントが関数にあたった場合、関数内の処理を追います。

「s」は「step」の省略形です。


(gdb) s

現在のデバッグ位置から処理を続行(continue)します。

「c」は「cont」の省略形です。


(gdb) c

ブレークポイントの設定

ブレークポイントを設定すると、デバッグ実行がブレークポイント設定位置で一時停止します。

「b」は「break」の省略形です。


(gdb) b 行番号
(gdb) b 関数名
(gdb) b ファイル名:行番号

ブレークポイントの状態を表示するには以下のコマンドを実行します。


(gdb) info break

設定した全てのブレークポイントを削除するには以下のコマンドを実行します。


(gdb) delete

個別ブレークポイントのみ削除する場合にはdeleteにinfo break で表示される番号を指定します。

番号はスペースで区切って、複数を指定することが可能。


(gdb) delete [info break で表示される番号]

変数値の表示

デバッグ位置の変数値を表示します。

p は printの省略です。


(gdb) p 変数表示
(gdb) p *ポインタ変数
(gdb) p &アドレス変数

ソースコードの表示

デバッグポイント(現在行)を中心として10行分を表示します。


(gdb) list

プログラムの状態の表示と変更

現在停止しているプログラムの状態(関数の呼び出し状況:バックトレース)を表示します。

以下3つのコマンドがあります。


(gdb) stack
(gdb) bt
(gdb) where

core解析

エラー時に出力されたcoreファイルをgdbに読ませることで、エラー時の実行状況を再現/解析することができます。


(gdb) gdb 実行ファイル coreファイル 


関連ページ