gdb 7.0,信号SIGCONT不会从pause()调用中断

时间:2009-11-30 20:24:11

标签: c++ c linux gdb

在指向一个新功能后,我为自己构建了一个版本的gdb 7.0,并且碰巧在我的路径中有这个版本。

尝试单步执行一些新代码,我添加了一个pause()调用,希望能够像这样出来:

(gdb) b 5048
Breakpoint 1 at 0x2b1811b25052: file testca.C, line 5048.
(gdb) signal SIGCONT
Continuing with signal SIGCONT.

Breakpoint 1, FLUSH_SUDF_TEST (h=@0x2b1811b061c0) at testca.C:5048
5048       rc = h.SAL_testcaFlushPagesByUDF( uPrimary - 1, uPrimary ) ;

(那是系统gdb,版本6.6)。

使用gdb 7.0时,我尝试这个时从未点击post-pause()断点。通过gdb 7中的各种多进程调试更改,是否有人知道是否必须以不同的方式处理信号处理以及如何处理?

1 个答案:

答案 0 :(得分:2)

除非调用信号处理程序,否则pause()函数不会返回(请参阅specificationman page)。

要在程序收到SIGCONT后返回,必须为SIGCONT安装处理程序。请尝试使用以下示例:

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

volatile int caught_signal = 0;

void handler(int sig)
{
    caught_signal = sig; 
}

int main()
{
    signal(SIGCONT, handler);
    pause();
    printf("Caught signal: %d, %s\n",
            caught_signal, strsignal(caught_signal));
    return 0;
}

gdb 7.0的行为是正确的:pause()完全忽略忽略的信号(如SIGCHLD,返回捕获的信号(SIGCONT),并且{{1}时没有信号传递命令已发出。

continue