转 Linux gdb调试器用法全面解析

转自    https://blog.csdn.net/21cnbao/article/details/7385161

1、list命令
    用法:list <linenum>
         list <function>
2、run命令
    程序运行参数:
        set args arg1 arg2
        show arg
    运行环境:
        path <dir>可设定程序的运行路径
        show paths 查看运行路径
3、break命令
    在gdb中用break命令来设置断点,设置断点的方法包括:
    break <function>
    break <linenum>
    break +offset / break -offset
    break filename:linenum
    break filename:function
    break *address   在程序运行的内存地址处停住。
    break
      break命令没有参数时,表示在下一条指令处停住。

    break ... if <condition>

      “...”可以是上述的break <linenum>、break +offset / break –offset中的参数,condition表示条件,在条件成立时停住。比如在循环体中,可以设置break if i=100,表示当i为100时停住程序。
    info
      查看断点时,可使用info命令,如info breakpoints [n]、info break [n](n表示断点号)。
4、单步命令
    step <count>
      单步跟踪,如果有函数调用,则进入该函数(进入函数的前提是,此函数被编译有debug信息)。step后面不加count表示一条条地执行,加表示执行后面的count条指令,然后再停住。
    next <count>
      单步跟踪,如果有函数调用,它不会进入该函数。同样地,next后面不加count表示一条条地执行,加表示执行后面的count条指令,然后再停住。
    set step-mode
      set step-mode on用于打开step-mode模式,这样,在进行单步跟踪时,程序不会因为没有debug信息而不停住,这个参数的设置可便于查看机器码。set step-mod off用于关闭step-mode模式。
    finish
      运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。
    until (缩写u)
      一直在循环体内执行单步,退不出来是一件令人烦恼的事情,until命令可以运行程序直到退出循环体。
    stepi(缩写si)和nexti(缩写ni)
      stepi和nexti用于单步跟踪一条机器指令,一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令。 另外,运行“display/i $pc”命令后,单步跟踪会在打出程序代码的同时打出机器指令,即汇编代码。
5、print
    p /x var     /t 二进制
    p *array@10
    display ss
7、watch命令
    watch一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。

    我们有下面的几种方法来设置观察点:

      watch <expr>:为表达式(变量)expr设置一个观察点。一旦表达式值有变化时,马上停住程序。

      rwatch <expr>:当表达式(变量)expr被读时,停住程序。

      awatch <expr>:当表达式(变量)的值被读或被写时,停住程序。

      info watchpoints:列出当前所设置了的所有观察点。 下面演示了观察i并在连续运行next时一旦发现i变化,i值就会显示出来的过程:
8、examine命令
    我们可以使用examine命令(缩写为x)来查看内存地址中的值。examine命令的语法如下所示:

    x/<x/f/u> <addr> 
    x/s 0x100000f2e

    (gdb) x /x 0x7fffffffe3d0
    0x7fffffffe3d0: 0x00000001
    (gdb) x /f 0x7fffffffe3d0
    0x7fffffffe3d0: 1.40129846e-45
    (gdb) x /n 0x7fffffffe3d0
    0x7fffffffe3d0: 1
    (gdb) x /t 0x7fffffffe3d0
    
9、set命令

    修改内存:

    (gdb) set {unsigned int}0x8048a51=0x0
    
10、jump命令
    
11、signal命令

14、info命令
    info命令可以在调试时用来查看寄存器、断点、观察点和信号等信息。

    要查看寄存器的值,可以使用如下命令:
      info registers (查看除了浮点寄存器以外的寄存器)
      info all-registers (查看所有寄存器,包括浮点寄存器)
      info registers <regname ...> (查看所指定的寄存器)
      info break 查看断点信息
      info watchpoints 列出当前所设置的所有观察点,
      info signals info handle 查看有哪些信号正在被GDB检测,
      info line命令来查看源代码在内存中的地址。
      info threads可以看多线程。
      info line后面可以跟行号、函数名、文件名:行号、文件名:函数名等多种形式,例如下面的命令会打印出所指定的源码在运行时的内存地址:

16、disassemble
    disassemble命令用于反汇编,它可被用来查看当前执行时的源代码的机器码,其实际上只是把目前内存中的指令dump出来。下面的示例用于查看函数fun
17、shell cmd执行linux命令
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值