gdb调试多进程

 <span style="font-family: Arial, Helvetica, sans-serif;">#include<iostream></span>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>

using namespace std;

typedef void (*PROCESS)(void *pContext);

pid_t CreateProcess(PROCESS child, void *pContext)
{
  pid_t pid = fork();
  
  if(0 == pid)
  {
    sleep(60);
    child(pContext);
    exit(0);
  }
  else
  {
    return pid;
  }
}

void MyChild(void *pContext)
{
  int i = (int)pContext;
  cout << "In child: " << i << endl;
}

int main()
{
  int i = 90;

  CreateProcess(MyChild, (void *)i);
 
  cout << "In Father" << endl;

  return 0;
}

如何进行对上面程序使用gdb进行调试呢???

首先熟悉下gdb的相关指令:

§进入gdb 
      Ø使用-g选项编译,加入调试信息
      Ø#gdb 要调试的可执行文件名
§查看当前文件
      Ø>list
      Ø>list文件名:行号
§设置断点
      Ø>break行号
§清除断点
      Ø>clear行号
§运行调试
      Ø>run
      Ø>continue
§查看变量值
      Ø>display表达式
§监控表达式的值
      Ø>watch表达式
§执行下一语句
     Ø>step
     Ø>next
§查看汇编代码
     Ø>disass
§查看寄存器
     Ø>inforegisters
§查看内存区域
     Ø>x/10xb 地址/产生地址的表达式
     Ø以16进制查看大小为10字节的内存区域

熟悉一个工具最好的手段是不断的重复使用它,上面涉及到的gdb调试指令也只有多练习才能够熟记。
下面讲解具体的对上面的例子程序使用gdb进行调试:
首先:
1.编译并生成带调试参数的可执行文件:
   gcc -g test.cpp -o test
   使用ls指令可以看到生成了可执行的 test文件
2.启动gdb(多开一个终端,以监控进程)
    gdb test
3. 设置断点在main函数和在fork子进程处
4. 在新打开的窗口处通过 ps -ef 查看 子进程和父进程的PID
5. attach + pid 得到jinc
6.stop 后 ,使用断点等就可以进行分析了


总的来说,这种方法在进程多的时候容易乱了,很不方面
具体的多进程使用GDB调试,还请参考:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值