Prog/debug/lldb
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#v9e07999]
#contents();
/////////////////////////////////////////////////////////...
* 起動オプション [#x27cbae1]
|~section |~option |~description ...
|Select Files |--file <file> |実行形式ファ...
|~|-c, --core=<file> |core ファイル...
|batch |--batch |バッチ処理モ...
|remote debug |-n, --attach-name <name> |attach する p...
|~|-p, --attach-pid <pid> |attach する p...
/////////////////////////////////////////////////////////...
* core file から bcaktrace を見る [#k5459c0a]
- プログラムが 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 (コアダンプ)
++ lldb を起動。プロンプト "''(lldb)''" が表示される。
$ lldb ./OOO -c core
(lldb) target create "./OOO" --core "core"
Core file '/home/kazu/work/devel/c++/SIGSEGV/core' (x86_...
++ backtrace を表示させる
$ lldb ./OOO -c core
(lldb) target create "./OOO" --core "core"
Core file '/home/kazu/work/devel/c++/SIGSEGV/core' (x86_...
(lldb) bt
* thread #1, name = 'OOO', stop reason = signal SIGQUIT
* frame #0: 0x00007fe7e24a5fe1 libpthread.so.0`raise(s...
frame #1: 0x000055d2dee7c20b OOO`SigsegvOnInvalid(un...
frame #2: 0x000055d2dee7c206 OOO`SigsegvOnInvalid(ra...
frame #3: 0x000055d2dee7c3b2 OOO`SigsegvWorkerThread...
frame #4: 0x000055d2dee7c0a8 OOO`std::thread::_State...
frame #5: 0x000055d2dee7c0a1 OOO`std::thread::_State...
frame #6: 0x000055d2dee7c0a1 OOO`std::thread::_State...
frame #7: 0x000055d2dee7c0a1 OOO`std::thread::_State...
frame #8: 0x000055d2dee7c0a1 OOO`std::thread::_State...
frame #9: 0x00007fe7e259ded0 libstdc++.so.6`___lldb_...
frame #10: 0x00007fe7e249aea7 libpthread.so.0`start_...
frame #11: 0x00007fe7e23baa2f libc.so.6`__clone at c...
/////////////////////////////////////////////////////////...
* debug 実行 [#vb4b2254]
/////////////////////////////////////////////////////////...
** コマンド [#zb645053]
アドレス
- bt, backtrace
-- バックトレースを表示する
-- 書式
bt [file:]function
bt [file:]line
- run [arg...]
-- プログラムのデバッグ実行開始
-- 引数をつけると、それがそのままプログラムに渡される。
- s, step
-- 次の行を実行
-- その行に関数が含まれている場合は、関数の中で step 実行...
- si, stepi
-- 次の行を実行
-- 次の行が関数呼び出しである場合、その関数を実行して抜け...
- n, next
-- 次を実行
-- その行に関数が含まれている場合は、関数を全て 1 step で...
- continue
-- 次の breakpoint まで実行する。もし次の breakpoint がな...
- p, print <variable>
-- プログラム中の変数 <variable> の値を表示する。
- p, print <format>, <variable> [,<variable2> [, ...]]
-- プログラム内の変数を <format> に従った書式で表示する
(lldb) print "[id:%d][address: %p]\n", i, address_array[i]
-- ''printf'' ではなく ''print'' であることに注意!
- l, list
-- 現在中断している場所の周辺のプログラムコードを表示する。
-- 表示領域を指定したい場合は、引数に開始行番号と終了行番...
(lldb) l <start-line-no>,<end-line-no>
- h, help
-- 全コマンドとその説明を一覧表示
- info
-- 各種情報の表示
-- info breakpoints: 現在設定されている breakpoint の一覧
-- info locals : ローカル変数の一覧
-- info thread(s) : スレッドの一覧
- t, thread <thread-id>
-- thread ID を指定する
- f, frame <frame-id>
-- frame を指定する
- gui
-- gdb の起動オプション -tui と同様のもの(但し画面構成は...
-- gui では、[F1][F2][F3][F4][F5][F6] [←][→] キーでメニ...
-- MATE-terminal では [F1] がヘルプに取られているので、[F...
-- gui モードを抜けるには、[F1] 押しでメニューから "Exit"...
//=======================================================...
** break point の保存・読み出し [#a0673309]
- save
-- save breakpoints <file-name> : 設定した breakpoint を ...
-- save gdb-index
-- save tracepoints
- source
-- save コマンドで保存したファイルを読み込む
-- source <file-name> : <file-name> を読み込む。
/////////////////////////////////////////////////////////...
* 無反応になったプログラムの状態を調べる [#laf4d12e]
+ 現在の状態を調べるため、現在の状態を core に吐かせて終...
$ kill -ABRT <PID>
または~
$ kill -6 <PID>
+ 出力された core を解析すると、上記 kill でシグナルを送...
/////////////////////////////////////////////////////////...
* マルチスレッドプログラムの解析 [#s60efb84]
- info thread
-- スレッドの一覧を表示。core の解析時にも使える
-- 現在選択されているスレッドのエントリの左端に "*" が表...
- thread <ThreadID>
-- 解析したい スレッドを選択する
- 選択中のbacktrace (bt), frame, info などのコマンドを普...
/////////////////////////////////////////////////////////...
* batch 処理 [#h8b29af9]
/////////////////////////////////////////////////////////...
* フロントエンド [#ha9e3fe9]
/////////////////////////////////////////////////////////...
* core file [#o08f3209]
- core file が出力されない場合は、 ulimit コマンドでユー...
- まずは確認
$ ulimit -c
0
- 設定する
-- ${HOME}/.bashrc に以下を記述
ulimit -c unlimited
-- core のサイズを制限したければ、 "unlimited" の代わりに...
/////////////////////////////////////////////////////////...
* 参考リンク [#links]
- [[lldb で使えるコマンド一覧 - yokaze.github.io>https://...
終了行:
#topicpath
/////////////////////////////////////////////////////////...
* 目次 [#v9e07999]
#contents();
/////////////////////////////////////////////////////////...
* 起動オプション [#x27cbae1]
|~section |~option |~description ...
|Select Files |--file <file> |実行形式ファ...
|~|-c, --core=<file> |core ファイル...
|batch |--batch |バッチ処理モ...
|remote debug |-n, --attach-name <name> |attach する p...
|~|-p, --attach-pid <pid> |attach する p...
/////////////////////////////////////////////////////////...
* core file から bcaktrace を見る [#k5459c0a]
- プログラムが 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 (コアダンプ)
++ lldb を起動。プロンプト "''(lldb)''" が表示される。
$ lldb ./OOO -c core
(lldb) target create "./OOO" --core "core"
Core file '/home/kazu/work/devel/c++/SIGSEGV/core' (x86_...
++ backtrace を表示させる
$ lldb ./OOO -c core
(lldb) target create "./OOO" --core "core"
Core file '/home/kazu/work/devel/c++/SIGSEGV/core' (x86_...
(lldb) bt
* thread #1, name = 'OOO', stop reason = signal SIGQUIT
* frame #0: 0x00007fe7e24a5fe1 libpthread.so.0`raise(s...
frame #1: 0x000055d2dee7c20b OOO`SigsegvOnInvalid(un...
frame #2: 0x000055d2dee7c206 OOO`SigsegvOnInvalid(ra...
frame #3: 0x000055d2dee7c3b2 OOO`SigsegvWorkerThread...
frame #4: 0x000055d2dee7c0a8 OOO`std::thread::_State...
frame #5: 0x000055d2dee7c0a1 OOO`std::thread::_State...
frame #6: 0x000055d2dee7c0a1 OOO`std::thread::_State...
frame #7: 0x000055d2dee7c0a1 OOO`std::thread::_State...
frame #8: 0x000055d2dee7c0a1 OOO`std::thread::_State...
frame #9: 0x00007fe7e259ded0 libstdc++.so.6`___lldb_...
frame #10: 0x00007fe7e249aea7 libpthread.so.0`start_...
frame #11: 0x00007fe7e23baa2f libc.so.6`__clone at c...
/////////////////////////////////////////////////////////...
* debug 実行 [#vb4b2254]
/////////////////////////////////////////////////////////...
** コマンド [#zb645053]
アドレス
- bt, backtrace
-- バックトレースを表示する
-- 書式
bt [file:]function
bt [file:]line
- run [arg...]
-- プログラムのデバッグ実行開始
-- 引数をつけると、それがそのままプログラムに渡される。
- s, step
-- 次の行を実行
-- その行に関数が含まれている場合は、関数の中で step 実行...
- si, stepi
-- 次の行を実行
-- 次の行が関数呼び出しである場合、その関数を実行して抜け...
- n, next
-- 次を実行
-- その行に関数が含まれている場合は、関数を全て 1 step で...
- continue
-- 次の breakpoint まで実行する。もし次の breakpoint がな...
- p, print <variable>
-- プログラム中の変数 <variable> の値を表示する。
- p, print <format>, <variable> [,<variable2> [, ...]]
-- プログラム内の変数を <format> に従った書式で表示する
(lldb) print "[id:%d][address: %p]\n", i, address_array[i]
-- ''printf'' ではなく ''print'' であることに注意!
- l, list
-- 現在中断している場所の周辺のプログラムコードを表示する。
-- 表示領域を指定したい場合は、引数に開始行番号と終了行番...
(lldb) l <start-line-no>,<end-line-no>
- h, help
-- 全コマンドとその説明を一覧表示
- info
-- 各種情報の表示
-- info breakpoints: 現在設定されている breakpoint の一覧
-- info locals : ローカル変数の一覧
-- info thread(s) : スレッドの一覧
- t, thread <thread-id>
-- thread ID を指定する
- f, frame <frame-id>
-- frame を指定する
- gui
-- gdb の起動オプション -tui と同様のもの(但し画面構成は...
-- gui では、[F1][F2][F3][F4][F5][F6] [←][→] キーでメニ...
-- MATE-terminal では [F1] がヘルプに取られているので、[F...
-- gui モードを抜けるには、[F1] 押しでメニューから "Exit"...
//=======================================================...
** break point の保存・読み出し [#a0673309]
- save
-- save breakpoints <file-name> : 設定した breakpoint を ...
-- save gdb-index
-- save tracepoints
- source
-- save コマンドで保存したファイルを読み込む
-- source <file-name> : <file-name> を読み込む。
/////////////////////////////////////////////////////////...
* 無反応になったプログラムの状態を調べる [#laf4d12e]
+ 現在の状態を調べるため、現在の状態を core に吐かせて終...
$ kill -ABRT <PID>
または~
$ kill -6 <PID>
+ 出力された core を解析すると、上記 kill でシグナルを送...
/////////////////////////////////////////////////////////...
* マルチスレッドプログラムの解析 [#s60efb84]
- info thread
-- スレッドの一覧を表示。core の解析時にも使える
-- 現在選択されているスレッドのエントリの左端に "*" が表...
- thread <ThreadID>
-- 解析したい スレッドを選択する
- 選択中のbacktrace (bt), frame, info などのコマンドを普...
/////////////////////////////////////////////////////////...
* batch 処理 [#h8b29af9]
/////////////////////////////////////////////////////////...
* フロントエンド [#ha9e3fe9]
/////////////////////////////////////////////////////////...
* core file [#o08f3209]
- core file が出力されない場合は、 ulimit コマンドでユー...
- まずは確認
$ ulimit -c
0
- 設定する
-- ${HOME}/.bashrc に以下を記述
ulimit -c unlimited
-- core のサイズを制限したければ、 "unlimited" の代わりに...
/////////////////////////////////////////////////////////...
* 参考リンク [#links]
- [[lldb で使えるコマンド一覧 - yokaze.github.io>https://...
ページ名: