gdb 学习笔记

一、gdb介绍
gdb通过一个系统调用 ptrace,该系统调用提供了一个方法,使得一个程序可以观察另一个程序的运行。

二、gdb调试方法
1.启动程序并调试: #gdb [program]

2.调试core文件: #gdb [program] [core]
  可以直接看到core文件产生时的信息,如使用bt查看调用栈,以及寄存器现场信息

3.调试正在运行的程序,又叫gdb attach功能: #gdb [program] [pid]
  a.gdb [program] [pid]会自动识别第二个参数为pid,如果是十进制数字的话
  b.运行gdb后,在gdb中使用指令(gdb) attach [pid]
  c.如果不使用源文件调试,可以直接#gdb -p [pid]来指定pid进入attach状态

三、gdb常用命令
1.断点命令 break,缩写b
  break <source_file_name:line_num> 文件名:行号
  break <function_name> 函数名
  
  查看断点 info b

2.删除断点命令 delet <break_point>,缩写d
  delete 1 删除1号断点

3.查看堆栈命令 backtrace,缩写bt (打印最内n层:bt n,最外n层:bt -n)

4.查看所有线程堆栈命令 thread apply all bt

5.查看变量命令 p
  p <para_name> 变量名 (可使用p直接修改变量值:p <para_name> = xx)
  查看数组的多个值 p *array@length // array:数组名,length:查看的长度

6.查看所有的局部变量 info local

7.转到线程命令 thread <thread_num>

8.转到帧命令 frame <frame_num>

9.执行下一步 next,缩写n

10.继续运行直到下一个断点 continue,缩写c

11.进入子函数命令 step,缩写s

12.结束子函数返回到调用函数命令 finish,缩写f

13.结束循环命令 until,缩写u

14.查看内存地址 examine,缩写x
   x/<n/f/u> <addr>
   输出格式
   x 按十六进制格式显示变量
   d 按十进制格式显示变量
   u 按十六进制格式显示无符号变量
   o 按八进制格式显示变量
   t 按二进制格式显示变量
   a 按十六进制格式显示变量
   c 按字符格式显示变量
   f 按浮点数格式显示变量
   s 按字符串格式显示变量
   eg. x/10wx addr 查看10个4字节16进制输出
       x/10i addr 查看该地址的10条指令

15.查看数据 print,缩写 p
   printf /f exp exp是表达式,/f指定打印时的格式,打印格式与x输出格式一致

16.设置传入参数 set args xxx
   gdb调试程序时,程序不能传入参数,如果需要传入参数,需要进入gdb后使用set args xxx指令

17.退出gdb模式 q

18.watch内存
   watch expr :GDB在expr被程序及其值改变时停止
   rwatch expr :GDB在expr被程序读时停止
   awatch expr :GDB在expr被程序读和写时停止
   watch *(int*)addr :查看一个地址是否有变化

19.gdb不阻塞进程运行
   gdb -batch -ex "command" -p pid (eg. gdb -batch -ex "call test_show()" -p 234567)
   

四、快捷键
ctrl+x ctrl+a 显示当前运行的函数
ctrl+l 刷新页面
enter 执行上一次的指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值