在指向一个新功能后,我为自己构建了一个版本的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中的各种多进程调试更改,是否有人知道是否必须以不同的方式处理信号处理以及如何处理?
答案 0 :(得分:2)
除非调用信号处理程序,否则pause()
函数不会返回(请参阅specification和man 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