Linux 下用gdb单步调试多进程方法(2)

首先用常规方法gdb test_fork.c 调试程序,分别在31行,41行设断点,然后用run执行程序,可以看到gdb在41行父进程的断点停下来.但是子进程在自行执行,无法在31断点停下.

这时用gdb attach功能来调试子进程,首先用ps -aux | grep test_fork 找出子进程号.

然后用 gdb test_fork <进程号>挂入已经知进程.这时就可以看到在子进程的断点可以停下来,而且父进程的gdb窗口里,子进程输出停下并受子进程的gdb控制,这里你可以用常规调试手段来看程序了.(如看memory,watch,stack等)

操作步骤,进入gdb首先用b 31 设置子进程中断点.然后用c(这里要用continue,因为attach的进程已经在运行了,不能用run)

然后可以看到断点在生效了.至此可以常规调试方法即可

[root@localhost src]# ps -aux | grep test_fork
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
root      3957  0.0  0.2  11012  4824 pts/7    S+   13:18   0:00 gdb test_fork
root      3959  0.0  0.0   1516   328 pts/7    T    13:19   0:00 /home/hxy/src/test_fork
root      3962  0.0  0.0   1516   280 pts/7    S    13:19   0:00 /home/hxy/src/test_fork
root      3985  0.0  0.0   5020   672 pts/9    R+   13:19   0:00 grep test_fork
[root@localhost src]# gdb test_fork 3962
GNU gdb Fedora (6.8-27.el5)
Copyright (C) 2008 Free Software Foundation, Inc.
(gdb) b 31
Breakpoint 1 at 0x8048541: file test_fork.c, line 31.
(gdb) c
Continuing.

Breakpoint 1, main () at test_fork.c:31
31            printf("child [%d]\n",i++);
(gdb) n
32            sleep(1);
(gdb) n
33          }
(gdb)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/24379.html