gdb给了我无限的"程序接收信号SIGTSTP"当我试图恢复时

时间:2012-05-02 14:24:56

标签: gdb pthreads

我在gdb中运行vlc并使用^ Z来中断它(因​​为^ C无效)。在检查了一些堆栈帧和变量之后,我试图使用“cont”来恢复程序,但它一直给我

Program received signal SIGTSTP, Stopped (user). 
[Switching to Thread 0x7fffd8d8e700 (LWP 19285)] 
0x00007ffff700247c in pthread_cond_wait@@GLIBC_2.3.2 ()
    from /lib64/libpthread.so.0

实际上,只有第一行是相同的。 LWP id在19285和19284之间循环,地址和功能也交替出现。

我试过“cont -a”,但它说 `-a'在全停模式下毫无意义。

恢复两个线程的正确程序是什么?

2 个答案:

答案 0 :(得分:2)

虽然调用“cont”足够多次(每个线程一次)应该恢复应用程序,但对于我从^ Z恢复最有效的是

signal SIGCONT

请注意,首先尝试“cont”然后“信号SIGCONT”可能会使gdb处于一种奇怪的状态。

答案 1 :(得分:0)

我相信这是因为没有处理SIGTSTP信号。当您恢复执行时,程序会看到信号并再次停止。

根据documentation of GDB

  

或者,如果信号为零,则继续执行而不发出信号。当程序因信号而停止时,这很有用,并且当使用continue命令恢复时,通常会看到信号; signal 0导致它在没有信号的情况下恢复。

所以要回答你的问题,尝试在GDB中执行signal 0命令,它应该继续执行。

此外,如果您不希望程序在SIGTSTP或任何信号处停止,您可以使用handle命令定义GDB接收信号时的行为。请参阅有关如何执行此操作的进一步说明here