Top/Prog/debug/lldb

目次

起動オプション

sectionoptiondescriptionremark
Select Files--file <file>実行形式ファイルとして <file> を指定
-c, --core=<file>core ファイルとして <file> を指定
batch--batchバッチ処理モードで起動。
remote debug-n, --attach-name <name>attach する process を指定する
-p, --attach-pid <pid>attach する process の pid を指定する

core file から bcaktrace を見る

  1. backtrace を表示させる
$ lldb ./OOO -c core
(lldb) target create "./OOO" --core "core"
Core file '/home/kazu/work/devel/c++/SIGSEGV/core' (x86_64) was loaded.

(lldb) bt
* thread #1, name = 'OOO', stop reason = signal SIGQUIT
  * frame #0: 0x00007fe7e24a5fe1 libpthread.so.0`raise(sig=<unavailable>) at raise.c:51:1
    frame #1: 0x000055d2dee7c20b OOO`SigsegvOnInvalid(unsigned int) [inlined] ExecuteInvalid(sig=<unavailable>) at SigsegvWorkerThread.cpp:40:41
    frame #2: 0x000055d2dee7c206 OOO`SigsegvOnInvalid(random_seed=<unavailable>) at SigsegvWorkerThread.cpp:46
    frame #3: 0x000055d2dee7c3b2 OOO`SigsegvWorkerThread(p_args=<unavailable>) at SigsegvWorkerThread.cpp:85:33
    frame #4: 0x000055d2dee7c0a8 OOO`std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*> > >::_M_run() [inlined] void std::__invoke_impl<void, void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*>((null)=<unavailable>, __f=<unavailable>, (null)=<unavailable>)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*&&) at invoke.h:60:36
    frame #5: 0x000055d2dee7c0a1 OOO`std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*> > >::_M_run() [inlined] std::__invoke_result<void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*>::type std::__invoke<void ((null)=<unavailable>, __fn=<unavailable>)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*>(void (*&&)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*&&) at invoke.h:95
    frame #6: 0x000055d2dee7c0a1 OOO`std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*> > >::_M_run() [inlined] void std::thread::_Invoker<std::tuple<void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*> >::_M_invoke<0ul, 1ul>((null)=<unavailable>, this=<unavailable>) at thread:264
    frame #7: 0x000055d2dee7c0a1 OOO`std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*> > >::_M_run() [inlined] std::thread::_Invoker<std::tuple<void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*> >::operator(this=<unavailable>)() at thread:271
    frame #8: 0x000055d2dee7c0a1 OOO`std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(CSigsegvWorkerThreadArgs*), CSigsegvWorkerThreadArgs*> > >::_M_run(this=<unavailable>) at thread:215
    frame #9: 0x00007fe7e259ded0 libstdc++.so.6`___lldb_unnamed_symbol586$$libstdc++.so.6 + 16
    frame #10: 0x00007fe7e249aea7 libpthread.so.0`start_thread(arg=<unavailable>) at pthread_create.c:477:8
    frame #11: 0x00007fe7e23baa2f libc.so.6`__clone at clone.S:95

debug 実行

コマンド

アドレス

break point の保存・読み出し

無反応になったプログラムの状態を調べる

  1. 現在の状態を調べるため、現在の状態を core に吐かせて終了させる
    $ kill -ABRT <PID>
    または
    $ kill -6 <PID>
  2. 出力された core を解析すると、上記 kill でシグナルを送られたときの状態を確認できる。

マルチスレッドプログラムの解析

batch 処理

フロントエンド

core file

参考リンク


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-05-21 (日) 11:26:33