曲径通幽论坛

标题: GDB 调试多线程 [打印本页]

作者: beyes    时间: 2010-10-21 00:42
标题: GDB 调试多线程
相关命令:
info threads : 给出关于当前所有线程的信息。
thread num :  其中 num 为线程号,如 thread 2 为查看第 2 号线程的信息。
break 88 thread 3: 当第 3 号线程达到代码的第 88 行时停止执行。
break 88 thread 3 if x==y : 当第 3 号线程达到代码的第 88 行,且变量 x 等于 y 时线程停止执行。

在调试线程中,用 info threads 查看线程状态时,如:

(gdb) info threads
[New Thread 0xb6bdcb90 (LWP 4928)]
  4 Thread 0xb6bdcb90 (LWP 4928)  0x002a5e88 in clone () from /lib/i686/nosegneg/libc.so.6
* 3 Thread 0xb75ddb90 (LWP 4791)  worker (unuse=0x0) at debug_pthread.c:35
  2 Thread 0xb7fdeb90 (LWP 4790)  0x080486b5 in worker (unuse=0x0) at debug_pthread.c:35
  1 Thread 0xb7fdf6c0 (LWP 4787)  0x002a5e88 in clone () from /lib/i686/nosegneg/libc.so.6

上面有星号的一行,表示当前在线程 3 中。此时,如果想查看此线程在干些什么,可以运行 bt 查看堆栈命令,如:

(gdb) thread 3
[Switching to thread 3 (Thread 0xb75ddb90 (LWP 4791))]#0  worker (unuse=0x0) at debug_pthread.c:35
35                      crossout(base);
(gdb) bt
#0  worker (unuse=0x0) at debug_pthread.c:35
#1  0x00d98869 in start_thread () from /lib/i686/nosegneg/libpthread.so.0
#2  0x002a5e9e in clone () from /lib/i686/nosegneg/libc.so.6

上面 worker 是一个指定线程执行的函数。

上面调试信息中用到的程序代码:http://www.groad.net/bbs/read.php?tid-2811.html




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2