我在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'在全停模式下毫无意义。
恢复两个线程的正确程序是什么?
答案 0 :(得分:2)
虽然调用“cont”足够多次(每个线程一次)应该恢复应用程序,但对于我从^ Z恢复最有效的是
signal SIGCONT
请注意,首先尝试“cont”然后“信号SIGCONT”可能会使gdb处于一种奇怪的状态。
答案 1 :(得分:0)
我相信这是因为没有处理SIGTSTP信号。当您恢复执行时,程序会看到信号并再次停止。
或者,如果信号为零,则继续执行而不发出信号。当程序因信号而停止时,这很有用,并且当使用continue命令恢复时,通常会看到信号;
signal 0
导致它在没有信号的情况下恢复。
所以要回答你的问题,尝试在GDB中执行signal 0
命令,它应该继续执行。
此外,如果您不希望程序在SIGTSTP或任何信号处停止,您可以使用handle
命令定义GDB接收信号时的行为。请参阅有关如何执行此操作的进一步说明here。