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