Prog/debug/gdb
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#eff751c0]
#contents();
/////////////////////////////////////////////////////////...
* 起動オプション [#a04ac3e7]
|~section |~option |~description |~remark |
|Select Files |<file>&br;--exec=<file> |実行形式ファイル...
|~|-c <file>&br;--core=<file> |core ファイルとして <file>...
|~|--se=<file> |シンボルファイル及び実行形式ファイルとし...
|~|--symbols=<file> |シンボルフィルとして <file> を指定 | |
|Output and user interface control |--tui |''T''erminal ...
|~|-w |GUI を使用する | |
|Operating modes |--configuration |gdb の設定内容の詳細を...
|other |--cd=<dir> |Currente Directory を <dir> にする | |
|remote debugging options |-b <BAUDRATE> |serial port の ...
|~|-l <TIMEOUT> |リモードでバッグにおけるタイムアウトを <...
|batch |-batch |バッチ処理モードで起動。 | |
|batch |-x <command-file> |バッチ処理モードで実行する g...
/////////////////////////////////////////////////////////...
* core file から bcaktrace を見る [#qe040af5]
- プログラムが SIGSEGV などのシグナルで死んだ場合に、吐き...
++ プログラムを実行し、コアダンプが発生する
$ ./TestProg
CATest::SetEventQueue: [event_queue:0x7ffdf43294e0]
Push: [queue_num:01][EVENT_ID:RUN]
Pop(2): [queue_num:00][EVENT_ID:01:RUN]
Push: [queue_num:01][EVENT_ID:INVALID]
Pop(2): [queue_num:00][EVENT_ID:04:INVALID]
Trace/breakpoint trap (コアダンプ)
++ gdb を起動。プロンプト "''(gdb)''" が表示される。
$ gdb
(gdb)
++ プログラムを読み込む
(gdb) file ./TestProg
Reading symbols from TestProg...(no debugging symbols fo...
++ core ファイルを読み込む
(gdb) core-file core
[New LWP 15174]
[New LWP 15173]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/l...
Core was generated by `./TestProg'.
Program terminated with signal SIGTRAP, Trace/breakpoint...
#0 0x00007f8f523dc79b in raise (sig=5) at ../nptl/sysde...
37 ../nptl/sysdeps/unix/sysv/linux/pt-raise.c: そのよう...
(gdb)
++ backtrace を表示させる
(gdb) bt
#0 0x00007f8f523dc79b in raise (sig=5) at ../nptl/sysde...
#1 0x0000000000404c47 in SigsegvWorkerThread (
p_args=<error reading variable: can't compute CFA fo...
#2 0x0000000000404abc in std::_Bind_simple<void (*(CSig...
this=<error reading variable: can't compute CFA for ...
at /usr/include/c++/4.9/functional:1700
#3 0x00000000004049b5 in std::_Bind_simple<void (*(CSig...
at /usr/include/c++/4.9/functional:1688
#4 0x0000000000404932 in std::thread::_Impl<std::_Bind_...
this=<error reading variable: can't compute CFA for ...
at /usr/include/c++/4.9/thread:115
#5 0x00007f8f526a0970 in ?? () from /usr/lib/x86_64-lin...
#6 0x00007f8f523d50a4 in start_thread (arg=0x7f8f51b0a7...
#7 0x00007f8f51bf387d in clone () at ../sysdeps/unix/sy...
(gdb)
--- この例では、SigsegvWorkerThread() から呼びだされてい...
/////////////////////////////////////////////////////////...
* 実行形式からデバッグシンボルが分離されている場合 [#c03d...
- 実行形式とデバッグシンボルが別ファイルになっている場合...
-- クラッキング対策などの理由で、実行形式からデバッグシン...
-- そうはいってもデバッグに困るので、別ファイルにデバッグ...
- こうした場合は、実行形式とデバッグシンボルを別々に読み...
++ 実行形式の読み込み
(gdb) file ./TestProg
Reading symbols from TestProg...(no debugging symbols fo...
(gdb)
++ デバッグシンボルファイルの読み込み
(gdb) symbol-file TestProg.sym
Load new symbol table from "TestProg.sym"? (y or n) y
Reading symbols from TestProg.sym...done.
(gdb)
- ここまで出来たら、core ファイルを読み込んで解析したり、...
/////////////////////////////////////////////////////////...
* debug 実行 [#c2b991e4]
/////////////////////////////////////////////////////////...
** コマンド [#ne4a16a8]
- break, b <break-point>
-- breakpoint を指定する
-- breakpoint には、下記を指定する
ファイル名:行番号
シンボル名(関数名)
アドレス
- backtrace
-- バックトレースを表示する
-- 書式
bt [file:]function
bt [file:]line
- run [arg...]
-- プログラムのデバッグ実行開始
-- 引数をつけると、それがそのままプログラムに渡される。
- step, s
-- 次の行を実行
-- その行に関数が含まれている場合は、関数の中で step 実行...
- stepi, si
-- 次の行を実行
-- 次の行が関数呼び出しである場合、その関数を実行して抜け...
- next, n
-- 次を実行
-- その行に関数が含まれている場合は、関数を全て 1 step で...
- continue
-- 次の breakpoint まで実行する。もし次の breakpoint がな...
- print, p <variable>
-- プログラム中の変数 <variable> の値を表示する。
- printf <format>, <variable> [,<variable2> [, ...]]
-- プログラム内の変数を <format> に従った書式で表示する
(gdb) printf "[id:%d][address: %p]\n", i, address_array[i]
- list, l
-- 現在中断している場所の周辺のプログラムコードを表示する。
-- 表示領域を指定したい場合は、引数に開始行番号と終了行番...
(gdb) l <start-line-no>,<end-line-no>
- info
-- 各種情報の表示
-- info breakpoints: 現在設定されている breakpoint の一覧
-- info locals : ローカル変数の一覧
-- info thread(s) : スレッドの一覧
//=======================================================...
** break point の保存・読み出し [#x850b805]
- save
-- save breakpoints <file-name> : 設定した breakpoint を ...
-- save gdb-index
-- save tracepoints
- source
-- save コマンドで保存したファイルを読み込む
-- source <file-name> : <file-name> を読み込む。
/////////////////////////////////////////////////////////...
* 無反応になったプログラムの状態を調べる [#ra57a878]
+ 現在の状態を調べるため、現在の状態を core に吐かせて終...
$ kill -ABRT <PID>
または~
$ kill -6 <PID>
+ 出力された core を解析すると、上記 kill でシグナルを送...
/////////////////////////////////////////////////////////...
* マルチスレッドプログラムの解析 [#k0c18a6e]
- info thread
-- スレッドの一覧を表示。core の解析時にも使える
-- 現在選択されているスレッドのエントリの左端に "*" が表...
- thread <ThreadID>
-- 解析したい スレッドを選択する
- 選択中のbacktrace (bt), frame, info などのコマンドを普...
/////////////////////////////////////////////////////////...
* batch 処理 [#yeac6740]
- コマンドを自動実行することが出来る。
- core dump の解析である程度使用するコマンドが決まってい...
** 使い方 [#dc2c4c71]
+ コマンドを記述したテキストファイルを用意する
-- 例
$ vi command.gdb
info thread
thread 2
info locals
+ core を解析する
$ gdb ${PROGRAM_FILE} -c core -batch -x <command-file>
+ 結果が出力される
-- このとき、<command-file> に記述された途中のコマンドで...
/////////////////////////////////////////////////////////...
* フロントエンド [#front-end]
//=======================================================...
** ddd [#ddd]
- GUIデバッガ。「gdb を使わなければならないが CUI が苦手...
//=======================================================...
** xxgdb [#xxgdb]
- GUIデバッガ。 ddd とほぼ同等の機能を有するが、ddd より...
//=======================================================...
** eclipse [#eclipse]
- IDE の一種。
- デバッグ実行機能として gdb を使用する。
/////////////////////////////////////////////////////////...
* core file [#be3d20b9]
- core file が出力されない場合は、 ulimit コマンドでユー...
- まずは確認
$ ulimit -c
0
- 設定する
-- ${HOME}/.bashrc に以下を記述
ulimit -c unlimited
-- core のサイズを制限したければ、 "unlimited" の代わりに...
終了行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#eff751c0]
#contents();
/////////////////////////////////////////////////////////...
* 起動オプション [#a04ac3e7]
|~section |~option |~description |~remark |
|Select Files |<file>&br;--exec=<file> |実行形式ファイル...
|~|-c <file>&br;--core=<file> |core ファイルとして <file>...
|~|--se=<file> |シンボルファイル及び実行形式ファイルとし...
|~|--symbols=<file> |シンボルフィルとして <file> を指定 | |
|Output and user interface control |--tui |''T''erminal ...
|~|-w |GUI を使用する | |
|Operating modes |--configuration |gdb の設定内容の詳細を...
|other |--cd=<dir> |Currente Directory を <dir> にする | |
|remote debugging options |-b <BAUDRATE> |serial port の ...
|~|-l <TIMEOUT> |リモードでバッグにおけるタイムアウトを <...
|batch |-batch |バッチ処理モードで起動。 | |
|batch |-x <command-file> |バッチ処理モードで実行する g...
/////////////////////////////////////////////////////////...
* core file から bcaktrace を見る [#qe040af5]
- プログラムが SIGSEGV などのシグナルで死んだ場合に、吐き...
++ プログラムを実行し、コアダンプが発生する
$ ./TestProg
CATest::SetEventQueue: [event_queue:0x7ffdf43294e0]
Push: [queue_num:01][EVENT_ID:RUN]
Pop(2): [queue_num:00][EVENT_ID:01:RUN]
Push: [queue_num:01][EVENT_ID:INVALID]
Pop(2): [queue_num:00][EVENT_ID:04:INVALID]
Trace/breakpoint trap (コアダンプ)
++ gdb を起動。プロンプト "''(gdb)''" が表示される。
$ gdb
(gdb)
++ プログラムを読み込む
(gdb) file ./TestProg
Reading symbols from TestProg...(no debugging symbols fo...
++ core ファイルを読み込む
(gdb) core-file core
[New LWP 15174]
[New LWP 15173]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/l...
Core was generated by `./TestProg'.
Program terminated with signal SIGTRAP, Trace/breakpoint...
#0 0x00007f8f523dc79b in raise (sig=5) at ../nptl/sysde...
37 ../nptl/sysdeps/unix/sysv/linux/pt-raise.c: そのよう...
(gdb)
++ backtrace を表示させる
(gdb) bt
#0 0x00007f8f523dc79b in raise (sig=5) at ../nptl/sysde...
#1 0x0000000000404c47 in SigsegvWorkerThread (
p_args=<error reading variable: can't compute CFA fo...
#2 0x0000000000404abc in std::_Bind_simple<void (*(CSig...
this=<error reading variable: can't compute CFA for ...
at /usr/include/c++/4.9/functional:1700
#3 0x00000000004049b5 in std::_Bind_simple<void (*(CSig...
at /usr/include/c++/4.9/functional:1688
#4 0x0000000000404932 in std::thread::_Impl<std::_Bind_...
this=<error reading variable: can't compute CFA for ...
at /usr/include/c++/4.9/thread:115
#5 0x00007f8f526a0970 in ?? () from /usr/lib/x86_64-lin...
#6 0x00007f8f523d50a4 in start_thread (arg=0x7f8f51b0a7...
#7 0x00007f8f51bf387d in clone () at ../sysdeps/unix/sy...
(gdb)
--- この例では、SigsegvWorkerThread() から呼びだされてい...
/////////////////////////////////////////////////////////...
* 実行形式からデバッグシンボルが分離されている場合 [#c03d...
- 実行形式とデバッグシンボルが別ファイルになっている場合...
-- クラッキング対策などの理由で、実行形式からデバッグシン...
-- そうはいってもデバッグに困るので、別ファイルにデバッグ...
- こうした場合は、実行形式とデバッグシンボルを別々に読み...
++ 実行形式の読み込み
(gdb) file ./TestProg
Reading symbols from TestProg...(no debugging symbols fo...
(gdb)
++ デバッグシンボルファイルの読み込み
(gdb) symbol-file TestProg.sym
Load new symbol table from "TestProg.sym"? (y or n) y
Reading symbols from TestProg.sym...done.
(gdb)
- ここまで出来たら、core ファイルを読み込んで解析したり、...
/////////////////////////////////////////////////////////...
* debug 実行 [#c2b991e4]
/////////////////////////////////////////////////////////...
** コマンド [#ne4a16a8]
- break, b <break-point>
-- breakpoint を指定する
-- breakpoint には、下記を指定する
ファイル名:行番号
シンボル名(関数名)
アドレス
- backtrace
-- バックトレースを表示する
-- 書式
bt [file:]function
bt [file:]line
- run [arg...]
-- プログラムのデバッグ実行開始
-- 引数をつけると、それがそのままプログラムに渡される。
- step, s
-- 次の行を実行
-- その行に関数が含まれている場合は、関数の中で step 実行...
- stepi, si
-- 次の行を実行
-- 次の行が関数呼び出しである場合、その関数を実行して抜け...
- next, n
-- 次を実行
-- その行に関数が含まれている場合は、関数を全て 1 step で...
- continue
-- 次の breakpoint まで実行する。もし次の breakpoint がな...
- print, p <variable>
-- プログラム中の変数 <variable> の値を表示する。
- printf <format>, <variable> [,<variable2> [, ...]]
-- プログラム内の変数を <format> に従った書式で表示する
(gdb) printf "[id:%d][address: %p]\n", i, address_array[i]
- list, l
-- 現在中断している場所の周辺のプログラムコードを表示する。
-- 表示領域を指定したい場合は、引数に開始行番号と終了行番...
(gdb) l <start-line-no>,<end-line-no>
- info
-- 各種情報の表示
-- info breakpoints: 現在設定されている breakpoint の一覧
-- info locals : ローカル変数の一覧
-- info thread(s) : スレッドの一覧
//=======================================================...
** break point の保存・読み出し [#x850b805]
- save
-- save breakpoints <file-name> : 設定した breakpoint を ...
-- save gdb-index
-- save tracepoints
- source
-- save コマンドで保存したファイルを読み込む
-- source <file-name> : <file-name> を読み込む。
/////////////////////////////////////////////////////////...
* 無反応になったプログラムの状態を調べる [#ra57a878]
+ 現在の状態を調べるため、現在の状態を core に吐かせて終...
$ kill -ABRT <PID>
または~
$ kill -6 <PID>
+ 出力された core を解析すると、上記 kill でシグナルを送...
/////////////////////////////////////////////////////////...
* マルチスレッドプログラムの解析 [#k0c18a6e]
- info thread
-- スレッドの一覧を表示。core の解析時にも使える
-- 現在選択されているスレッドのエントリの左端に "*" が表...
- thread <ThreadID>
-- 解析したい スレッドを選択する
- 選択中のbacktrace (bt), frame, info などのコマンドを普...
/////////////////////////////////////////////////////////...
* batch 処理 [#yeac6740]
- コマンドを自動実行することが出来る。
- core dump の解析である程度使用するコマンドが決まってい...
** 使い方 [#dc2c4c71]
+ コマンドを記述したテキストファイルを用意する
-- 例
$ vi command.gdb
info thread
thread 2
info locals
+ core を解析する
$ gdb ${PROGRAM_FILE} -c core -batch -x <command-file>
+ 結果が出力される
-- このとき、<command-file> に記述された途中のコマンドで...
/////////////////////////////////////////////////////////...
* フロントエンド [#front-end]
//=======================================================...
** ddd [#ddd]
- GUIデバッガ。「gdb を使わなければならないが CUI が苦手...
//=======================================================...
** xxgdb [#xxgdb]
- GUIデバッガ。 ddd とほぼ同等の機能を有するが、ddd より...
//=======================================================...
** eclipse [#eclipse]
- IDE の一種。
- デバッグ実行機能として gdb を使用する。
/////////////////////////////////////////////////////////...
* core file [#be3d20b9]
- core file が出力されない場合は、 ulimit コマンドでユー...
- まずは確認
$ ulimit -c
0
- 設定する
-- ${HOME}/.bashrc に以下を記述
ulimit -c unlimited
-- core のサイズを制限したければ、 "unlimited" の代わりに...
ページ名: