免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4025 | 回复: 0
打印 上一主题 下一主题

gdb 调试多线程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-13 17:25 |只看该作者 |倒序浏览
如果目标进程已经core dump了,那么 gdb -c core xxx   xxx是对应的程序文件。
如果目标进程还在运行,通常此时用于调试线程死锁的情况。有两种方法
一是 gdb -p xxx  xxx是该进程的进程ID
或者用gcore xxx先获取对应进程的core,他会生成一个core文件 core.xxx

进入gdb后
(gdb) info threads
可以列出所有的线程,缺省设为当前的线程前面有一个*号
比如
gdb) info thread
    9 system thread 154262  Priority:154  0xc00000000042f670:0 in __ksleep
   +0x30 () from /usr/lib/hpux64/libc.so.1
    4 system thread 153674  Priority:168  0xc0000000004367d0:0 in _nanosleep2_sys+0x30 () from /usr/lib/hpux64/libc.so.1
    3 system thread 153673  Priority:168  0xc0000000004367d0:0 in _nanosleep2_sys+0x30 () from /usr/lib/hpux64/libc.so.1
    2 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
将列出栈的调用情况,以及对应源代码中的位置,此时谨慎察看对应代码,一般必有结果。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17004/showart_1000655.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP