欢迎来到天天文库
浏览记录
ID:27759443
大小:441.05 KB
页数:9页
时间:2018-12-05
《使用gdb调试多进程程序的子程序》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、GDB是limix系统上常用的c/c++调试工具,功能十分强大。对于较为复杂的系统,比如多进程系统,如何使用GDB调试呢?考虑下面这个三进程系统:进程ProdProc2Pioc3Proc2是Prod的子进程,Proc3乂是Proc2的子进程。如何使用GDB调试proc2或者proc3呢?实际上,GDB没有对多进程程序调试提供直接支特。例如,使用GDB调试某个进程,如果该进程fork了子进程,GDB会继续调试该进程,子进程会不受干扰地运行下去。如果你事先在子进程代码里设定了断点,子进程会收到SIGTRAP信号并终止。那么该如何调试子进程呢?其实我们可以利用GDB的特点或者其他一些辅助手段
2、来达到目的。此外,GDB也在较新内核上加入一些多进程调试支持。接卜来我们诈细介绍几种方法,分别是follow-fork-mode方法,attach子进程方法和GDBwrapper方法。foilow-fork-mode在2.5.60版Linux内核及以后,GDB对使用fork八fork创建子进程的程序提供丫foilow-fork-mode选项来支持多进程调试。foilow-fork-mode的用法为:setfo11ow-fork-mode[parent
3、child]•parent:fork之后继续调试父进程,子进程不受影响。•child:fork之后调试子进程,父进程不受影响。因此如果需
4、要调试子进程,在启动gdb后:(gdb)setfoilow-fork-modechild并在子进程代码设罝断点。此外还有detach-on-fork参数,指示GDB在fork之后是否断开(detach)某个进程的调试,或者都交由GDB控制:setdetach-on-fork[on
5、off]•on:断开调试follow-fork-mode指定的进程。•off:gdb将控制父进程和子进程。follow-fork-mode指定的进程将被调试,另一个进程置于暂停(suspended)状态。注意,最好使用GDB6.6或以上版本,如果你使用的是GDB6.4,就只有follow-fork-mode模
6、式。follow-fork-mode/detach-on-fork的使用还是比较簡单的,但由于其系统内核/gdb版木限制,我们只能在符合要求的系统上才能使用。而且,由于follow-fork-mode的调试必然是从父进程开始的,对于fork多次,以至于出现孙进程或曽孙进程的系统,例如上图3进程系统,调试起来并不方便。Attach子进程众所周知,GDB有附着(attach)到正在运行的进程的功能,即attach命令。因此我们可以利用该命令attach到子进程然后进行调试。例如我们要调试某个进程RIM_0racle_Agent.9i,首先得到该进程的pid[root@tivf09
7、tianq]#ps-ef
8、grepRIM_Oracle_Agent.9inobody67226721005:57?00:00:00RIMOracleAgent.9iroot754127816006:10pts/300:00:00grep-irim_oracle_agent.9i通过pstree可以看到,这是一个三进程系统,oserv是RIM0raclc_prog的父进程,RIMOrac1eprog乂是RIMOracleAgent.9i的父进程。[root@tivf09root]#pstree-H6722通过pstree察看进程-osorv**-bdtsorvico'-gatewayos
9、erv•Policyprogl、RIM_OracieproqRIH_OracleAgenRIMOracle_Aqen2*
10、RIMOra-porLnap•rpc.statd•scsieh02*[scndmail]sahd--sshd-*-bash—•wriatest-sysloqd-vsftpd•xfsxinotd-卜in.tolnotdlogine-tn.tolnetdloqlnbashp»tr«o启动GDB,attach到该进程用GDB连接进程[rootstivf09tlanq]HqdbGNUgdbRedHatLinux(6<3<0.0*1.90rh>Copyright2004Fre
11、eSoftwareFoundation,Inc»GDBisfreesoftwareFcoveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeit.ind/ordistributecopiesofitundercertainconditions
此文档下载收益归作者所有