linux如何调试多进程程序

2016-02-19 14:39 9 1 收藏

下面图老师小编要跟大家分享linux如何调试多进程程序,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - Linux教程 】

在Linux系统操作中,经常会遇到多进程调试的问题,其实多进程的调试没有想象中的那么复杂,下面图老师小编就给大家介绍下Linux如何调试多进程程序,感兴趣的朋友不妨来了解下。

 linux如何调试多进程程序

多进程的调试:

(1)follow-fork-mode

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

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

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:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

$./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多进程程序调试的方法介绍了,多进程的调试我们通常使用的是gdb,当你在调试的时候多少都会用到gdb调试工具。

来源:https://www.tulaoshi.com/n/20160219/1607455.html

延伸阅读
欢迎来到C#的奇妙天空,在这里,希望你能获得你想获得的东西,.我们真诚希望能给你带来巨大的帮助,带你进入另外一个广阔的空间。 Come on. Follow me and then U can Win! 同Linux下的Gnu C ++ 工具中的gdb类似,C#提供了一个命令行调试程序"Cordbg.exe",通过这个程序你可以很轻松的调试你的C#应用程序,本文在下面不可能完全给...
标签: 电脑入门
在Windows系统中,利用软件借助系统底层命令快速关闭无响应程序。 使用Windows的朋友一定遇到过,电脑中的程序在运行的过程中,因为种种原因经常没有响应,就需要到进程列表中将无响应的程序关闭。但是在众多进程中快速找到无响应的进程不是一件容易的事情,需要花费半天的时间才能够找到。如果你一直为这个事而困惑的话,可以试试一款名字为P...
   我们课程设计,我选择了一个进程调度模拟,希望大家给看看,多提意见,好久没来发帖子了。 #includeiostream.h #includestdlib.h #includetime.h #includestdio.h #includestring.hconst int  MAXCOMMANDLEN =50;         ////////////////////////////////////...
标签: Web开发
面对一大段的javascript脚本,以前总是会很头疼,找不到调试他的方法,如果出现什么错误,总是要从头分析,然后插入很多Alert();调试起来很麻烦。      实际上Visual Studio 对JavaScript 脚本是可以设置断点进行调试的。只是有很多象我这样的新手不会用而已。      只需要打开IE—工具—Intern...
标签: Delphi
  在应用程序开发中如何检测、处理程序的运行错误是一个很重要的问题。在 Delphi 的集成开发环境 ( IDE ) 中提供了一个完善的内置调试器,可以帮助你发现大部分程序错误。但并不是所有的错误都可以被发现,而且当程序涉及到与外设的数据交换或操作外设,如要求用户输入、读写磁盘等时,错误的发生是程序无法控制的,如输入非法字符、...

经验教程

884

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部