GDB的用法

我现在有一个进程运行一段时间就处于sem状态,现在我想用GDB绑定到那个进程来检查到底是那条语句导致的,请问怎样做呢?

gdb

(gdb) attach

我用attach绑定后,用什么命令来检查是哪条语句导致SEM状态呢?

用"info thread" 检查各线程状态。
用"thread "来切换到感兴趣的线程
用"bt“来检查调用过程。

程序要用-g编译,用-g连接。

我的这个程序没有用线程,用BACKTRACE查看时出现以下结果:
#0 XXXXX ??()
#1 XXXXX ??()
其中XXXX好象是一个地址,请问这是什么信息呢?“??”是什么东西

这个是程序调用地址。有??是因为你的程序没有用-g编译连接。

backtrace结果出现如下:
#0 0xb032a2ae
#1 0x08064087 in mco_sem_p()
#2 0x08059416 in mco_async_event_wait()
#3 0x0804de42 in main() at file.c :135

pidin的结果显示我的进程file处于sem状态 后面的地址为565bec

从backtrace结果可以看出什么来呢?

尝试用TimerTimeout(), 内核调用超时解除阻塞

从backtrace的结果,可以看出来,在main()里面调用了 mco_async_event_wait()函数;这个函数又调用了 mco_sem_p()函数,然后进入sem_wait()。

mco_*() 不是QNX的函数,你要找出来这是谁的代码。