目录
作者:bandaoyu 链接:https://blog.csdn.net/bandaoyu/article/details/120552039
GDB多线程查看崩溃时线程的堆栈
例子
2021-09-29 16:37:17.931204 7fff637f7700 422708 59 ERROR RDMAStack in polling_start 2021-09-29 16:37:17.931227 7fff637f7700 422708 59 ERROR RDMAStack polling_start start polling thread:1 [New Thread 0x7fff4475f700 (LWP 423826)] 2021-09-29 16:37:17.937471 7fff637f7700 422708 59 ERROR RDMAStack polling_start start: 1 handle_rx_fun threads 2021-09-29 16:37:17.937488 7fff637f7700 422708 59 ERROR RDMAStack polling_start start: handle_rx_fun thread [New Thread 0x7fff43f5e700 (LWP 423827)] 2021-09-29 16:37:17.938410 7fff4475f700 423826 18 ERROR RDMAStack max_num:1 bf_num: 2021-09-29 16:37:17.938437 7fff4475f700 423826 18 ERROR RDMAStack busy_polling bf_num: tail: terminate called without an active exception 2021-09-29 16:37:17.938455 7fff4475f700 423826 18 ERROR RDMAStack max_num:1 bf_num: tail: 2021-09-29 16:37:17.938459 7fff4475f700 423826 18 ERROR RDMAStack busy_polling bf_num: tail: 2021-09-29 16:37:17.938464 7fff4475f700 423826 18 ERROR RDMAStack max_num:1 bf_num: tail: 2021-09-29 16:37:17.938467 7fff4475f700 423826 18 ERROR RDMAStack busy_polling bf_num: tail: 2021-09-29 16:37:17.938473 7fff4475f700 423826 18 ERROR RDMAStack max_num:1 bf_num: tail: 2021-09-29 16:37:17.938476 7fff4475f700 423826 18 ERROR RDMAStack busy_polling bf_num: tail: 2021-09-29 16:37:17.938481 7fff4475f700 423826 18 ERROR RDMAStack max_num:1 bf_num: tail: 2021-09-29 16:37:17.938484 7fff4475f700 423826 18 ERROR RDMAStack busy_polling bf_num: tail: 2021-09-29 16:37:17.938494 7fff4475f700 423826 18 ERROR RDMAStack max_num:1 bf_num: tail: 2021-09-29 16:37:17.938498 7fff4475f700 423826 18 ERROR RDMAStack busy_polling bf_num: tail:Program received signal SIGABRT, Aborted.[Switching to Thread 0x7fff637f7700 (LWP 422708)] 0x00007fffeb4b3387 in raise () from /lib64/libc.so.6 |
上面表示 程序abort了。abort之前在线程7fff4475f700运行 (abort之前在这个线程,并不一定是这个线程引起的),abort之后程序切换到0x7fff637f7700线程。
(gdb) i threads 查看线程信息
查看到线程7fff4475f700的 id 是79,而当前在线程12 (前面有*号)
(gdb) i threads ……
|
(gdb) thread 79 切换到线程79
(gdb) thread 79 [Switching to thread 79 (Thread 0x7fff4475f700 (LWP 423826))] #0 0x00007fffeb570ccd in poll () from /lib64/libc.so.6 |
(gdb) bt 查看线程 79的调用堆栈
(gdb) bt #0 0x00007fffeb570ccd in poll () from /lib64/libc.so.6 #1 0x00007fffec815c3b in co::libgo_poll (fds=0x7fff4475d2b0, nfds=2, timeout=200, nonblocking_check=true) at /compiledir/zhangtao/workspace/Libgo/libgo/netio/unix/hook.cpp:84 #2 0x00007fffec80ccdc in poll (fds=0x7fff4475d2b0, nfds=2, timeout=200) at /compiledir/zhangtao/workspace/Libgo/libgo/netio/unix/hook.cpp:477 #3 0x00005555562b24cb in RDMADispatcher::busy_polling() () #4 0x00007fffebe18360 in ?? () from /opt/h3c/lib/libstdc++.so.6 #5 0x00007fffeca91ea5 in start_thread () from /lib64/libpthread.so.0 #6 0x00007fffeb57b9fd in clone () from /lib64/libc.so.6 (gdb) f 3 #3 0x00005555562b24cb in RDMADispatcher::busy_polling() () (gdb) i local No symbol table info available. (gdb) f 2 #2 0x00007fffec80ccdc in poll (fds=0x7fff4475d2b0, nfds=2, timeout=200) at /compiledir/zhangtao/workspace/Libgo/libgo/netio/unix/hook.cpp:477 477 /compiledir/zhangtao/workspace/Libgo/libgo/netio/unix/hook.cpp: 没有那个文件或目录. (gdb) i local tk = 0x0 __FUNCTION__ = "poll" (gdb) i arg fds = 0x7fff4475d2b0 nfds = 2 timeout = 200 (gdb) |
线程的查看以及利用gdb调试多线程
转自:线程的查看以及利用gdb调试多线程;https://blog.csdn.net/zhangye3017/article/details/80382496
命令行查看:
//查看当前运行的进程
ps aux|grep a.out
//查看当前运行的轻量级进程
ps -aL|grep a.out
//查看主线程和新线程的关系
pstree -p 主线程id
2. 线程栈结构的查看
1. 获取线程ID
2. 通过命令查看栈结构 ps stack 线程ID