对于程序中创建子进程的情况,进行gdb调试时会默认选择父进程进行调试,假如需要对子进程进行调试就需要使用特殊方法。
共有两种方法可供选择:
目录
②set detach-on-fork off(可不选择该指令)
③set follow-fork-mode child(以调试子进程为例)
④set follow-fork-mode parent(切换调试父进程)
一.attach子进程PID
这个方式就是当进程运行时,获取进程PID然后在进入gdb调试时,通过attach指令调试PID对用的进程。
本质就是指定PID然后调试,并不是真正的进程切换调试。
示例代码:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main()
{
pid_t id = fork();
if(id == 0)
{
while(1)
{
printf("%s\n", "i am child");
sleep(1);
}
}
else
{
while(1)
{
printf("%s\n", "i am father");
sleep(3);
}
}
return 0;
}
过程如下:
①.运行进程
②获取进程PID(示例调试子进程)
③打开gdb并将attach进程PID
④开始调试
二.set follow-fork-mode mode
mode的可供选择值有两个parent与child,对应父进程与子进程。
(gdb) set follow-fork-mode parent//调试父进程
(gdb) set follow-fork-mode child//调试子进程
这个只能选择fork的第一个子进程作为child进行调试。
还是使用上述示例代码,过程如下:
①选择程序进入gdb调试
②set detach-on-fork off(可不选择该指令)
该gdb指令是当调试父或子进程时,另一个会自动暂停在fork位置。这里使用是为了便于观察
③set follow-fork-mode child(以调试子进程为例)
④set follow-fork-mode parent(切换调试父进程)
The darkest hour is that before the dawn—— Fuller
如有错误,敬请斧正