GDB的基本使用

程序运行上下文

  1. set args:可指定运行时参数。例:set args 10 20 30
  2. show args:命令可以查看设置好的运行参数。
  3. run ( r ):运行程序。
  4. run > outfile:将程序的输出结果重定向到outfile文件中。
  5. info terminal:显示你程序用到的终端的模式。
  6. tty /dev/tty1:在gdb下tty命令可以设置输入输出使用的终端设备。退出gdb后使用tty可以查看当前终端设备的名称。
  7. info inferiors:显示GDB调试的所有inferior(每一个被调试程序的执行状态记录在一个名为inferior的结构中,一般情况下一个inferior对应一个进程),GDB会为他们分配进程ID,其中带有*的进程是正在调试的inferior

断点的设置和管理

设置断点

  1. break:在当前位置设置断点,可以简写为b
  2. b 10:设置断点,在源程序第10行
  3. b func:设置断点,在func函数入口处

管理断点

  1. info b:显示所有断点信息。
  2. delete breakpoints 1:删除断点1。
  3. delete breakpoints:删除所有断点。
  4. disable breakpoint 1:禁用断点1。
  5. enable breakpoint 1:允许使用断点1。
  6. clear number或者func:清除在number行或者func上的所有断点。

函数的调用

(gdb) call main
$1={int (int, char **)} 0x40052d <main>
(gdb) call printf("abcd")     
$2=4    

显示数据

  1. print value:检查各个变量的值。
  2. whatis / ptype value:显示某个变量的类型。
  3. watch expr:设置观察点,在变量或表达式expr的值有变化时,马上停住程序。
  4. info watchpoints:列出当前设置的所有观察点。

栈相关命令

  1. backtrace ( bt ):查看函数调用栈信息。
  2. frame(f) num:查看第num层栈信息。
  3. info args:打印当前函数的参数名及值。
  4. info locals:打印当前函数的所有局部变量及值。

寄存器

  1. info registers:打印除浮点和矢量寄存器(xmm,ymm,zmm)之外的所有寄存器。
  2. info all-registers:打印所有寄存器,包括浮点和向量寄存器。

有一组专用的gdb变量可以用来检查和修改计算机的通用寄存器,gdb提供了目前每一台计算机中实际使用的4个寄存器的标准名字:

  • $pc: 程序计数器

  • $fp: 帧指针(当前堆栈帧)

  • $sp: 栈指针

  • $ps: 处理器状态

其他

  1. run ( r ):运行你的程序。
  2. quit:退出gdb。
  3. continue ( c ):继续执行直到下一个停止点。
  4. step ( s ):单步调试下一步,会进入函数。
  5. next ( n ):单步调试下一步,不会进入函数。
  6. ni / si:下一条指令,进入函数/不进入函数。
  7. finish:运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。
  8. until ( u ):执行一行程序,若此时程序是在 for/while/do loop 循环的最后一行,则一直执行到循环结束后的第一行程序后停止。
  9. disassemble:输出汇编代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值