日期:2014-05-16  浏览次数:21113 次

gdb调试多线程程序时的问题, 为何不在断点处停下来?
gdb调试多线程程序时的问题,   为何不在断点处停下来?  
环境:   redhat   as   2.1   +   gcc2.96   +   gdb5.3.90

先进入gdb,   然后attach一个正在运行的服务器程序的pid
在调试多线程程序时遇到一个问题,   我在一个服务器线程函数中设置了一个断点
然后客户端访问服务器,   本来程序应该在这个断点处停下来,   但gdb显示:

Program   received   signal   SIGTRAP,   Trace/breakpoint   trap.
0x40b11322   in   accept   ()   from   /lib/libc.so.6

居然在libc.so.6库中停了下来???     使用bt命令的输出如下:
#0     0x40b11322   in   accept   ()   from   /lib/libc.so.6
#1     0x40027213   in   accept   ()   from   /lib/libpthread.so.0
#2     0x0804f20a   in   Srv   ()   at   test.c:2674
#3     0x0804f719   in   main   (argc=1,   argv=0xbffec3f4)   at   test.c:2867

但在简单的多线程程序的调试过程中没有这个问题(到断点处程序都会停下来)
请问这个问题如何解决??  


------解决方案--------------------
在到达断点之前收到了signal SIGTRAP
这个信号中断了程序的运行?

你可以先检查这个信号的原因,
如果没有问题,再continue试试能不能跑到断点处
------解决方案--------------------
SIGTRAP: 当子进程因被追踪而暂停时便产生此信号给父进程.
------解决方案--------------------
没有结果
------解决方案--------------------
info thread
thread #