设为首页 加入收藏

TOP

Linux下多进程的调试
2014-11-23 22:00:01 来源: 作者: 【 】 浏览:14
Tags:Linux 进程 调试

Linux下多进程的调试:


(1)follow-fork-mode


set follow-fork-mode [parent | child] ———— fork之后选择调试父进程还是子进程


(parent: fork之后继续调试父进程;child: fork之后调试父进程。默认的是fork之后调试父进程)


set detach-on-fork [on | off] ———— 指示gdb在fork之后是否断开某个进程的调试,或交由gdb控制


(on: 断开调试follow-fork-mode指定的进程;off: gdb将控制父进程和子进程,follow-fork-mode指定的进程将被调试,另一个进程置于暂停状态)


(2)attach pid


使用attach需要在父子进程代码最开始添加sleep()语句,让进程睡眠,之后在后台运行进程,通过ps获取子进程pid,最后attach pid进入调试子进程。


eg:


$./test & //使进程test在后台运行


$ps -ef | grep test //查看进程pid


结果中类似下面的形式:


XXX 12345 23456 ———————————————— ./test //父进程


XXX 12346 12345 ———————————————— ./test //子进程,这里的第一个数字就是子进程pid


$ gdb -q test


(gdb)attach 12346 //attach到子进程


添加的sleep()可以是类似这样的语句:


while(pause) //pause是一个标志变量


sleep(1);


在gdb调试时你只需要set pause=0使条件不满足即可执行后续代码。


(3)gdb wrapper


当父进程fork出子进程,子进程会紧接着调用exec函数来执行新的代码,这时也可以用gdb wrapper。它的优点是不用添加额外代码。


Linux下将一个进程放到后台运行:


(1)./test &


(2)"./test" 之后按下 "ctrl+z" , 用"bg %num"返回的数字将该进程放到后台;


Linux下将进程拉回前台:


用"fg %num"


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下多线程的调试 下一篇Linux中实现对输入的异步

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: