GDB调试多线程程序

gdb有thread相关命令,如info thread(简写成info th)显示线程消息,b xx thread yy可以针对某个thread设置断点,thread xx(简写成thr xx)切换到某个thread。
再配合frame(简写f)相关的命令(比如updown在不同frame间跳转),基本可以处理若干个不同的线程间的debug……

其他的debugger,应该也会有同样的功能。

不过如果用的线程比较多的话……建议还是写一些辅助函数,在debug过程中打印出tid,然后对比一些蹊跷的地方,效果会更好。


查找进程id

ps -e | grep a.out(a.out)为名字
12826 pts/3    00:00:00 a.out //进程id为12826

启动gdb attach 进程 [root@localhost
~]# gdb a.out 12826 (gdb) info threads //显示所有线程信息 (gdb) thread 2 //跳到第2个线程 (gdb) bt //查看线程2的堆栈,可以发现该线程堵塞在lock.c第17行

 


 

 

posted @ 2015-12-22 21:33  bohaoist  阅读(605)  评论(0编辑  收藏  举报