Welcome 微信登录

首页 / 操作系统 / Linux / Linux 下用gdb单步调试多进程方法

当你在程序中使用fork(),如果用gdb来调试.不管是你在子进程是否设置断点.你都只能在父进程单步调试,而没办法进入到子进程当中进行单步调试.因为gdb的所有处理(查看堆栈,内存,变量值)都是针对当前进程空间.那么是否就没办法调试多进程程序的子进程代码呢?办法还是有的,一般的标准方法是再打开一个gdb用attach功能来调试子进程.gdb attach 功能是不执行被调试程序,而是把gdb“挂”到一个已经运行的进程之上来进行调试,这挂载的动作称为attach.当然也包括挂载子进程。首先我们看一个如下简单的多进程程序。/*
  Author: Andrew Huang bluedrum@163.com
  debug multi-process by gdb.
*/
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#define PRINT_INT(e) printf("%s=%d ",#e,e)

int main()
{
  pid_t pid;
  int i,val = 100;
  
  printf("process id %d ",getpid());
    
  pid = fork();
  
  PRINT_INT(val);
  
  if(pid == 0)
  {/* child process */
    
    val+=100;
    printf("child process id %d,parent id %d ",getpid(),getppid());
    
    PRINT_INT(val);
    
    i = 0;
    
    while(1)
    {
      printf("child [%d] ",i++);
      sleep(1);
    }
  }
  else if(pid >0)
  {/* parent child */
     printf("parent process id %d ",getpid());
     
    for(i=0 ; i < 5 ; i++)
    {
      printf("parent [%d] ",i);
    }
     
     val+=10;
     
     PRINT_INT(val);
     
      wait(NULL);
     
     
  }
  else /* error */
  {
   exit(-1);
  }
  
  
  PRINT_INT(val);
  
  return 0;
}这个程序很简单,就是子进程在无限循环打印屏幕,而父进程在用wait等待.编译 gcc test_fork.c -o test_fork -g
  • 1
  • 2
  • 3
  • 4
  • 5
  • 下一页
Linux内置字符串处理Ubuntu 11.04 beta1 编译 t264相关资讯      Linux教程 
  • Linux教程:如何在命令行中查看目  (07/28/2014 12:22:23)
  • Linux 修改root密码  (11/03/2012 07:53:38)
  • su - root 与su root的区别  (06/06/2012 00:39:40)
  • Linux进程间通信:消息队列  (01/28/2013 09:43:00)
  • U盘安装Linux开机无法启动解决方法  (10/07/2012 08:55:52)
  • Windows 7/Linux 同步时间  (05/15/2012 06:17:55)
本文评论 查看全部评论 (0)
表情: 姓名: 字数