5

我在 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”在全停模式下毫无意义。

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

4

2 回答 2

4

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

signal SIGCONT

请注意,先尝试“cont”然后再尝试“signal SIGCONT”可能会使 gdb 处于奇怪的状态。

于 2013-02-20T22:13:37.743 回答
0

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

根据GDB 的文档

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

因此,要回答您的问题,请尝试signal 0在 GDB 中执行该命令,它应该会恢复执行。

此外,如果您不希望程序在 SIGTSTP 或任何信号处停止,您可以使用该handle命令定义 GDB 在收到信号时的行为。在此处查看有关如何执行此操作的更多说明。

于 2015-04-10T16:05:58.767 回答