Chinaunix首页 | 论坛 | 博客
  • 博客访问: 151476
  • 博文数量: 64
  • 博客积分: 2545
  • 博客等级: 少校
  • 技术积分: 692
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-22 20:00
文章分类

全部博文(64)

文章存档

2011年(3)

2009年(51)

2008年(10)

我的朋友

分类: C/C++

2009-06-26 17:27:00

GDB基本命令-从打开文件到调试结束

 

  • 事前准备
    1 gcc -g -o 将原文件编译成能让gdb调试的目标文件
    2 gdb 打开要调试的目标文件
    3 set args  设置参数 
            或run的时候用run
    来实现
    4 show args 参看参数
    5 show environment 查看environment
    5 unset env 清除所有环境变量
    6 set environment 来设置一个环境变量VAR1
    设置/删除断点
    1 info sources  或 list   来查看文件,要不然都不知道应该在哪里设置断点
    2 查看断点 info breakpoints
    3 break
    4    tbreak 设置临时断点,到达后被自动删除
    5 enable
      enable delete
            enable once
    6 disable
    7 delete breakpoints  删除断点
      或单用delete而不加所有参数来删除所有断点
    ->断点进阶
    1 break test.c:5 设置断点到指定文件
    2 break 在内存某一个位置出暂停
    3 break  if  来设置条件断点
    4 condition   对已存在的断点附上条件
    5 command 能在第n个断点出设置命令
    开始调试
    0 run 程式开始执行
    1 step or s 单步执行 
    2 next or n非进入式单步执行,就是说,当调用其他函数时,不进入那个函数内部
    3 finish 一直运行到函数返回
    4 until 运行到函数某一行
    5 continue or cont 执行到下一个断点或程式结束
    6 return  改动程式流程,直接结束当前函数,并将指定值返回
    设置变量
    set
    1 set i = 5 改动程式中一个变量的值
    2 set $i =5 来设置一个pdb环境里自己的变量,该变量独立于程式,也就是说只有gdb认识
    获取程式信息
    1 监视变量
      print /fmt     打印信息
      fmt格式,有以下几种
      ------------------------------
       x  十六进制
      ------------------------------
       d  十进制
      ------------------------------
       u 无符号数
      ------------------------------
       o 八进制
      ------------------------------
       t  二进制
      ------------------------------
       a 十六进制打印
      ------------------------------
       c 字符格式
      ------------------------------
       f   浮点数
      ------------------------------
    2 追踪变量
      watch      追踪被赋值动作  eg. i = 4;
            rwatch    追踪读动作 eg. b = i;
            awatch    追踪所有动作
            del watchpoint .
      info display
      display
            show display
      del display
    3  监视内存
      x /
      Address能是内存地址或是指针,比如0x8799f000,p,&var
      fmt 由三部分组成 NFU,N表示要查看的长度,U为格式,其中有分为bhwg,分别表示以字节,半字,字,双字
      来显示。
       eg.
       (gdb) x argv[0]
       0xbfffff61: 0x6d6f682f
       (gdb) x /10cb argv[0]
       0xbfffff61: 47 ’/’ 104 ’h’ 111 ’o’ 109 ’m’ 101 ’e’ 47 ’/’ 67 ’C’ 104 ’h’
       0xbfffff69: 97 ’a’ 114 ’r’
       (gdb) x /10tb
       12
       0xbfffff6b: 01101100 01100101 01110011 00101111
       01110111 01101111 01110010 01101011
       0xbfffff73: 01110000 01101100
       (gdb) x /10th
       0xbfffff7f:          
       0110101101101111 0111010000101111 0110000100000000
       01100010000000110001100000000 0110010000000000 0110010100000000 0110011000000000
       0xbfffff8f: 0110011100000000 0101011000000000
       (gdb)
    4 查看总的frame信息
      backtrace 或 bt
      说明:frame是函数调用时候所产生的堆栈,存储函数被调用的信息
    5 选择要查看的frame
         frame
  • 阅读(2074) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~