gdb core 调试多线程

 2023-09-05 阅读 90 评论 0

摘要:ref :http://blog.sina.com.cn/s/blog_62dc94eb0100flyn.html 如果目标进程已经core dump了,那么 gdb -c core xxxxxx是对应的程序文件。 如果目标进程还在运行,通常此时用于调试线程死锁的情况。 有两种方法 一是 gdb -p xxxxxx是该进程的进程ID或者用gcore x

ref :http://blog.sina.com.cn/s/blog_62dc94eb0100flyn.html



如果目标进程已经core dump了,那么 gdb -c core xxx   xxx是对应的程序文件。

 


如果目标进程还在运行,通常此时用于调试线程死锁的情况。

有两种方法


一是 gdb -p xxx  xxx是该进程的进程ID
或者用gcore xxx先获取对应进程的core,会得到系统生成一个core文件 core.xxx
 
进入gdb后
(gdb) info threads
  可以列出所有的线程,缺省设为当前的线程前面有一个*号


比如

gdb) info thread9 system thread 154262  Priority:154  0xc00000000042f670:0 in __ksleep+0x30 () from /usr/lib/hpux64/libc.so.14 system thread 153674  Priority:168  0xc0000000004367d0:0 in _nanosleep2_sys+0x30 () from /usr/lib/hpux64/libc.so.13 system thread 153673  Priority:168  0xc0000000004367d0:0 in _nanosleep2_sys+0x30 () from /usr/lib/hpux64/libc.so.12 system thread 153672  Priority:154  0xc00000000042f670:0 in __ksleep+0x30 () from /usr/lib/hpux64/libc.so.1
*   1 system thread 153671  Priority:154  0xc000000000432ef0:0 in _read_sys+0x30 () from /usr/lib/hpux64/libc.so.1


 
这是1个死锁的例子,可以看到线程9 和线程2都停在 __ksleep上。

 


如果想看各个线程的详细堆栈信息,比如要看9的


gdb)thread 9


把当前线程设成9,然后就可以查看相关信息
比如
gdb)bt
将列出栈的调用情况,以及对应源代码中的位置,此时谨慎察看对应代码,一般必有结果
http://blog.sina.com.cn/s/blog_62dc94eb0100flyn.html

转载于:https://www.cnblogs.com/schips/p/10735807.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/230.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息