码迷,mamicode.com
首页 > 系统相关 > 详细

linux下多进程的调试

时间:2014-08-01 13:49:31      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:多进程调试   gdb   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
    ubuntu下gdb要使用attach pid权限是不够的,需要切换到root,或者你可以sudo chmod +s /usr/bin/gdb给gdb添加权限。
    使用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下多进程的调试,布布扣,bubuko.com

linux下多进程的调试

标签:多进程调试   gdb   linux   

原文地址:http://blog.csdn.net/u011848617/article/details/38333257

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!