gpt4 book ai didi

c - 调试子进程不适用于 set detach-on-fork off

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:56 29 4
gpt4 key购买 nike

我有下面的简单程序。

#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>

#define CHILD 0

int main()
{
pid_t pid;
printf(" My pid = %d \n", getpid());
getchar();
pid = fork();
if( pid == CHILD){
printf(" child: My pid = %d \n", getpid());
while(1);
}
else{
printf(" My pid = %d \n", getpid());
printf(" Newly created child pid = %d \n", pid);
while(1);
}
}

我正在尝试用 gdb 调试它。我想同时调试父进程和子进程。我使用了以下命令

Reading symbols from ./1...done.
(gdb) b 12
Breakpoint 1 at 0x73f: file 1.c, line 12.
(gdb) set detach-on-fork off
(gdb) r
Starting program: ./1
My pid = 121710


Breakpoint 1, main () at 1.c:12
12 pid = fork();
(gdb) n
[New process 121715]
Reading symbols from ./1...done.
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x73f

(gdb) info inferior
Num Description Executable
* 1 process 121710 ./1
2 process 121715 ./1
(gdb) bt
#0 0x00007ffff7ac8b1c in __libc_fork () at ../sysdeps/nptl/fork.c:135
#1 0x0000555555554744 in main () at 1.c:12
(gdb) n
[New process 121715]
Reading symbols from ./1...done.
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x73f
Cannot insert breakpoint 1.
Cannot access memory at address 0x73f

你们能帮我解决我在上面的 gdb 命令中犯的错误吗?

最佳答案

我在使用 gdb 8.1 调试 fork() 时遇到了同样的问题,调试选项相同。

一种解决方案是在调用 fork() 之前删除所有断点。比如你在fork()的前一个源码行创建了一个断点,用于单步执行fork(),当前inferior停在这个断点后应该删除所有的断点,然后当前inferior可以继续运行成功,不会有错误提示比如不能插入断点……

关于c - 调试子进程不适用于 set detach-on-fork off,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023979/

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