http://www.debian.org/doc/manuals/debian-reference/ch11.ja.html
(gdb) thread apply all bt マルチスレッドプログラムの全てのスレッドのバックトレースを取得
(gdb) bt full 関数コールのスタック上に来たパラメーターを取得
(gdb) thread apply all bt full 異常のオプションの組み合わせでバックトレースとパラメーターを取得
(gdb) thread apply all bt full 10 無関係の出力を切り最後の10のコールに関するバックトレースとパラメーターを取得
(gdb) set logging ongdb アウトプットをファイルに書き出す (デフォールトは "gdb.txt")
---------------------------------------------------------------------------------------------------------------------------
http://uguisu.skr.jp/Windows/gdb.html
info stack 関数の呼び出しスタックの一覧を表示
info thread 存在しているスレッドの一覧を表示
詳細を知りたいスレッドは、スレッド番号を選択し、where や up コマンドで確認します。
(gdb) thread(一覧表示)
(gdb) thread 3
(gdb) where / bt
(gdb) up 2
1つのコマンドを複数のスレッドに対して実行するコマンドは
「thread apply [threadno] [all] args」です。
全スレッドの callstack を表示するには次のように入力します。
(gdb) thread apply all info stack
gdb を起動した後に動的に coreファイルを生成。
(gdb) help generate-core-file
core dump を有効化する
$ limit coredumpsize (サイズ)
deadlock した場合の coreファイルの生成方法
core dump を有効化しておき、別 terminal から signal を送って core を吐かせます。
% ps -aux | grep (デバッグしたい実行ファイル)
(実行ファイル の プロセスID を調べる)
% kill -3 (プロセスID)<pid>
「-3」は「-ABRT」でも同じです。
core の利用方法
(gdb) gdb 実行ファイル coreファイル
core dump からの thread backtrace 取得
取得した core を利用し、segfault (or deadlock) 発生時の状況を gdb で解析できます。
% gdb 実行ファイル core.<pid>
...
(gdb) set logging file <ログファイル名>
(gdb) set logging on
(gdb) thread apply all bt → 全スレッド表示
(gdb) set logging off
(gdb) quit
実行中に deadlock してしまった場合
実行中に deadlock してしまった場合、gdb を attach し、backtrace を取る。
% ps auxww | grep 実行ファイル → 実行ファイルの pid を調べる
% gdb 実行ファイル
(gdb) attach <実行ファイル の pid>
...
(gdb) set logging file <ログファイル名>
(gdb) set logging on
(gdb) thread apply all bt
(gdb) set logging off
(gdb) quit
nm コマンドを使う
$ nm -D libuXXX.so
「.so」ファイルの場合には「-D」オプションを付けることでダイナミックシンボルが表示できます。
仮に「シンボルがありません」と表示される場合は、ビルドオプションに「-gが付いている」「strip されていない」などを確認してください
小文字はそのシンボルがローカルであることを意味し、 大文字はそのシンボルがグローバル (外部定義) であることを意味します。
T コードセクション内の定義
D 初期化されたデータセクション
B 初期化されないデータセクション
U 未定義。シンボルはライブラリによって使われているが、ライブラリ内では定義されていない
W weak. 他のライブラリも同じシンボルを定義している場合、その定義によりオーバーライドされる
lddコマンドによる依存ファイル一覧
$ ldd 実行ファイル
プログラムヘッダ構造
$ strace 実行ファイル
システムコールのトレース結果
$ readelf -l 実行ファイル
・コアファイルを出力できる様にするには
確認&変更:
>limit
coredumpsize 0 kbytes
>limit coredumpsize unlimited
>limit
coredumpsize unlimited
デバッグ:
>gdb myprog core.16171
(gdb) where
2012年7月6日金曜日
gdbの使い方
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿