当前位置:   article > 正文

Linux——gdb调试时多进程切换方法(attach/follow-fork-mode)_gdb attach

gdb attach

对于程序中创建子进程的情况,进行gdb调试时会默认选择父进程进行调试,假如需要对子进程进行调试就需要使用特殊方法。

共有两种方法可供选择:

目录

一.attach子进程PID

①.运行进程

②获取进程PID(示例调试子进程)

③打开gdb并将attach进程PID

④开始调试

二.set follow-fork-mode mode

①选择程序进入gdb调试

②set detach-on-fork off(可不选择该指令)

③set follow-fork-mode child(以调试子进程为例)

④set follow-fork-mode parent(切换调试父进程)


一.attach子进程PID

这个方式就是当进程运行时,获取进程PID然后在进入gdb调试时,通过attach指令调试PID对用的进程。

本质就是指定PID然后调试,并不是真正的进程切换调试。

示例代码:

  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<sys/types.h>
  4. #include<sys/wait.h>
  5. int main()
  6. {
  7. pid_t id = fork();
  8. if(id == 0)
  9. {
  10. while(1)
  11. {
  12. printf("%s\n", "i am child");
  13. sleep(1);
  14. }
  15. }
  16. else
  17. {
  18. while(1)
  19. {
  20. printf("%s\n", "i am father");
  21. sleep(3);
  22. }
  23. }
  24. return 0;
  25. }

过程如下:

①.运行进程

②获取进程PID(示例调试子进程)

③打开gdb并将attach进程PID

④开始调试

 

二.set follow-fork-mode mode

mode的可供选择值有两个parent与child,对应父进程与子进程。

  1. (gdb) set follow-fork-mode parent//调试父进程
  2. (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 


如有错误,敬请斧正

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/287959
推荐阅读
相关标签
  

闽ICP备14008679号