gpt4 book ai didi

c++ - gdb 7.0,SIGCONT 信号不会中断 pause() 调用

转载 作者:太空狗 更新时间:2023-10-29 12:22:08 27 4
gpt4 key购买 nike

在被指向一个新功能后,我为自己构建了一个 gdb 7.0 版本,并且碰巧它还在我的道路上。

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

(gdb) b 5048Breakpoint 1 at 0x2b1811b25052: file testca.C, line 5048.(gdb) signal SIGCONTContinuing with signal SIGCONT.Breakpoint 1, FLUSH_SUDF_TEST (h=@0x2b1811b061c0) at testca.C:50485048       rc = h.SAL_testcaFlushPagesByUDF( uPrimary - 1, uPrimary ) ;

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

在 gdb 7.0 中,当我尝试此操作时,我从未遇到过 post-pause() 断点。随着 gdb 7 中的各种多进程调试更改,有人知道是否必须以不同方式处理信号处理以及如何处理?

最佳答案

除非调用信号处理程序,否则 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) ,并且在发出 continue 命令时没有信号传递。

(gdb) break 17
Breakpoint 1 at 0x80484b3: file pause.c, line 17.
(gdb) continue
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x0012d422 in __kernel_vsyscall ()
(gdb) signal SIGCHLD
Continuing with signal SIGCHLD.
^C
Program received signal SIGINT, Interrupt.
0x0012d422 in __kernel_vsyscall ()
(gdb) signal SIGCONT
Continuing with signal SIGCONT.

Breakpoint 1, main () at pause.c:17
17 printf("Caught signal: %d, %s\n",
(gdb)

关于c++ - gdb 7.0,SIGCONT 信号不会中断 pause() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1822199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com