一、常用的几个命令
1. set detach-on-fork on|off
设置为off时,作用为调试某一个进程时将其他进程挂起。
2. set follow-fork-mode child|parent
设置接下来进入父进程还是子进程。
3. info inferiors
查看当前的进程信息。如下
4. inferiors NUM_PROCESS
切换调试进程,其中NUM_PROCESS为info inferiors中的Num.
二、调试示例
对于一段多进程代码:
#include <unistd.h>
#include <stdio.h>
int main()
{
int p = fork(), i;
if(p==0)
{
puts("我是子进程\n");
for(i=0; i<10; i++)
{
sleep(1);
printf("son i=%d\n",i);
}
exit(0);
}
else
{
puts("我是父进程\n");
for(i=0; i<10; i++)
{
sleep(1);
printf("parent i=%d\n",i);
}
}
return 0;
}
首先,在第6行(创建子进程的地方)打上一个断点,然后运行:
此时,还没有执行fork()函数,因此只有一个进程,使用info inferiors查看:
接着,若不设置将其他进程挂起,单步调试,会发现:
调试父进程时,子进程自动执行完了。
若使用set detach-on-fork off将子进程挂起,会发现:
子进程被挂起了,不会得到cpu时间片,因此不会执行。
此时若使用info inferiors查看,会发现:
存在2个进程。
此时可以使用inferiors 2切换到子进程运行。
关于多进程调试就将这么多。