デバッガ
gdbについて書く
dbxに(あまり覚えていないが)簡単な設定変更で
gdbと同じようなインタフェースに変更できる(gdb on/off ?)
とりあえずのところgdbについてだけ書いておく
dbxに(あまり覚えていないが)簡単な設定変更で
gdbと同じようなインタフェースに変更できる(gdb on/off ?)
とりあえずのところgdbについてだけ書いておく
gdb
GNUのデバッガ
コンパイル時に-gオプションをつけた実行ファイルに対してデバッグできる
コンパイル時に-gオプションをつけた実行ファイルに対してデバッグできる
$ gdb &italic(){実行ファイル}
コアファイルの解析
$ gdb &italic(){実行ファイル} core
実行オプション
| オプション | 動作 |
| -s ファイル名 | ファイル名のファイルをシンボルテーブルとする |
| -e ファイル名 | ファイル名を実行ファイルとして使用 |
| -c ファイル名 | ファイル名をコアファイルとして使用 |
| -x ファイル名 | ファイル名をコマンドファイルとして実行 コマンドファイル:gdbコマンドをあらかじめ書いたファイル |
| -d ディレクトリ名 | ソースファイルを検索するパスにディレクトリ名のディレクトリを追加 |
| -r | シンボルファイル内のシンボルテーブル全体を起動直後に読み込む 起動が遅くなるが毎度毎度呼ばない分動作は速くなる |
主なコマンド
| コマンド(短縮) | コマンド | 動作 |
| r | run | 実行 実行時の引数をオプションとしてつけられる r 1 2 3 ・・・など |
| q | quit | 終了 |
| h | help | ヘルプ表示 コマンド(短縮でも可)指定でコマンドのヘルプ |
| b 位置 | breakpoint | ブレークポイント設定 デフォルトは現在の実行位置をブレークポイントにする 行番号,関数名,ファイル名:行番号・・・などの指定ができる |
| d 番号 | delete | 指定した番号のブレークポイントを削除 |
| n | next | 次の処理を実行(関数の中には入らない) |
| s | step | 次の処理を実行、関数の内部に入る |
| c | continue | 次のブレークポイントまで飛ぶ |
| u | up | 呼び出した上位の関数へ移動、移動できない場合は次の処理を実行 |
| d | down | その行で呼ばれる下位の関数へ移動 |
| p | 出力 p/format でフォーマット指定可能 C言語と同じように型変換して出力することも可能 値を代入したり関数実行も可能 | |
| printのオプション | 内容 | |
| p/a | アドレス | |
| p/c | 文字 | |
| p/d | 符号付き10進数 | |
| p/f | 浮動小数点数 | |
| p/o | 8進数 | |
| p/t | 2進数 | |
| p/u | 符号なし10進数 | |
| p/x | 16進数 | |
| x | hex | メモリの内容表示 printと同じオプションのほかに以下が使える |
| hexのオプション | 内容 | |
| x/s | 文字列 | |
| x/i | 逆アセンブル | |
| what | whatis | 変数の型を表示 |
| whe | where | 現在実行している箇所へ到達するまでの関数の呼び出しを示す bt(backtrace)やi sと同じ |
| i | info | 情報表示 |
| infoのオプション | 内容 | |
| i b | ブレークポイント・ウォッチポイント・キャッチポイントの表示 | |
| i s | 関数スタックの表示 | |
| i th | スレッドの表示 | |
| j | jump | 指定した関数・アドレス・行数へ飛んで実行継続 |
| l | list | リスト表示 デフォルトで直近、関数・行番号・ファイル指定もできる |
| cond | condition | ブレークポイントに停止条件を設定 cond 2 iCnt==0 ←ブレークポイント2はiCnt=0のときだけ停止 cont 2 iCnt=0 ←ブレークポイント2で停止するとiCntに0が代入される(誤用?) |
| wat | watch | 指定した式が変更されるときに停止 w iCnt==0 ←iCnt=0のとき停止 |
| awat | awatch | 指定した対象が読み書きアクセスされるときに停止 |
| rwat | watch | 指定した対象が読まれたときに停止 |
| cat | catch | 指定されたイベントが発生した時に停止 |
| catchのオプション | 内容 | |
| cat throw | C++例外の発生 | |
| cat catch | C++例外のキャッチ | |
| cat exec | execの呼び出し(HP-UNIXのみ) | |
| cat fork | forkの呼び出し(HP-UNIXのみ) | |
| cat vfork | vforkの呼び出し(HP-UNIXのみ) | |
| tc | tcatch | 1回だけ停止させるキャッチポイント |
| thr | thread | 指定スレッドへ移動 |
| at プロセス番号 | attach | 実行中のプロセスにアタッチする |
| det | detach | デタッチする |
小技/TIPSなど
- 同じような動作確認などを何度も行う場合
あらかじめブレークポイント設定のコマンドをファイルに書いておき
-xで読み込む
-xで読み込む
- 動作中のプロセスをデバッグするには
gdbを立ち上げブレークポイントを設定しておく
psコマンドでプロセス番号を調べattachする
quitする前にdetachすること
psコマンドでプロセス番号を調べattachする
quitする前にdetachすること
- デッドロックや無限ループなどが起きている場合
上記の動作中のプロセスのデバッグ方法で解析するか
場合によってはkillコマンドでわざとにコアを吐かせて解析する
場合によってはkillコマンドでわざとにコアを吐かせて解析する
- コアファイルの解析
gdbの引数で実行ファイルとコアファイルを指定する
where/btコマンドで落ちた箇所を調べる
where/btコマンドで落ちた箇所を調べる