对于程序中创建子进程的情况,进行gdb调试时会默认选择父进程进行调试,假如需要对子进程进行调试就需要使用特殊方法。
共有两种方法可供选择:
目录
②set detach-on-fork off(可不选择该指令)
③set follow-fork-mode child(以调试子进程为例)
④set follow-fork-mode parent(切换调试父进程)
这个方式就是当进程运行时,获取进程PID然后在进入gdb调试时,通过attach指令调试PID对用的进程。
本质就是指定PID然后调试,并不是真正的进程切换调试。
示例代码:
- #include
- #include
- #include
- #include
- 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;
- }
过程如下:
mode的可供选择值有两个parent与child,对应父进程与子进程。
- (gdb) set follow-fork-mode parent//调试父进程
-
- (gdb) set follow-fork-mode child//调试子进程
这个只能选择fork的第一个子进程作为child进行调试。
还是使用上述示例代码,过程如下:
该gdb指令是当调试父或子进程时,另一个会自动暂停在fork位置。这里使用是为了便于观察
The darkest hour is that before the dawn—— Fuller
如有错误,敬请斧正