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ファイル