~如何GDB调试因pthread_cond_wait()阻塞的线程??~
如题,比如有两个线程1,2,主线程1执行到某处会pthread_cond_wait(),然后由线程2唤醒,继续执行.
我用gdb调试时却出了问题,调试时主线程执行到pthread_cond_wait()函数处,进入等待状态,ctrl+c后看到的线程信息如下:
(gdb) info thread
* 3 Thread 1026 (LWP 19165) 0x420292e5 in sigsuspend () from /lib/i686/libc.so.6
2 Thread 2049 (LWP 19164) 0x420e0037 in poll () from /lib/i686/libc.so.6
1 Thread 1024 (LWP 19143) 0x420292e5 in sigsuspend () from /lib/i686/libc.so.6
想要继续单步执行,反应如下:
(gdb) n
Single stepping until exit from function sigsuspend,
which has no line number information.
请问怎么回事呢??按理说此时我的线程2的pthread_cond_signal()函数早调用了啊,信号应该是发出来了。
我如何能继续调试下去??
------解决方案--------------------这个问题我也遇到过,是因为pthread_cond_wait把pthread_cond_signal的信号错过了,自已调吧。我最近也在被libevent的同步问题苦恼。
------解决方案--------------------还是用记日志的方式调试吧
------解决方案--------------------用gdb调试多线程非常不好用,因为很多线程没有处理SIGTRAP信号,会被中断,因此当你重新continue的时候这些线程就没了。你可以取GNU的网站找一个叫NPTL Tracer(名字不一定确切,只用过一次)是专门用来调试多线程同步的,不过也不太好用。其实有时候加日志的方法是一种非常有效的方法。