- プログラムを実行し、コアダンプが発生する
$ ./OOO
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 ./OOO
Reading symbols from OOO...(no debugging symbols found)...done.
- 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/libthread_db.so.1".
Core was generated by `./OOO'.
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
#0 0x00007f8f523dc79b in raise (sig=5) at ../nptl/sysdeps/unix/sysv/linux/pt-raise.c:37
37 ../nptl/sysdeps/unix/sysv/linux/pt-raise.c: そのようなファイルやディレクトリはありません.
(gdb)
- backtrace を表示させる
(gdb) bt
#0 0x00007f8f523dc79b in raise (sig=5) at ../nptl/sysdeps/unix/sysv/linux/pt-raise.c:37
#1 0x0000000000404c47 in SigsegvWorkerThread (
p_args=<error reading variable: can't compute CFA for this frame>) at SigsegvWorkerThread.cpp:63
#2 0x0000000000404abc in std::_Bind_simple<void (*(CSigsegvWorkerThreadArgs*))(CSigsegvWorkerThreadArgs*)>::_M_invoke<0ul>(std::_Index_tuple<0ul>) (
this=<error reading variable: can't compute CFA for this frame>)
at /usr/include/c++/4.9/functional:1700
#3 0x00000000004049b5 in std::_Bind_simple<void (*(CSigsegvWorkerThreadArgs*))(CSigsegvWorkerThreadArgs*)>::operator()() (this=<error reading variable: can't compute CFA for this frame>)
at /usr/include/c++/4.9/functional:1688
#4 0x0000000000404932 in std::thread::_Impl<std::_Bind_simple<void (*(CSigsegvWorkerThreadArgs*))(CSigsegvWorkerThreadArgs*)> >::_M_run() (
this=<error reading variable: can't compute CFA for this frame>)
at /usr/include/c++/4.9/thread:115
#5 0x00007f8f526a0970 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007f8f523d50a4 in start_thread (arg=0x7f8f51b0a700) at pthread_create.c:309
#7 0x00007f8f51bf387d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
(gdb)
- この例では、SigsegvWorkerThread() から呼びだされている raise() で落ちている。(そもそも raise() はそういうことをするための関数なのだが、ここはこういった例示の為のサンプルプログラムなので...)