调试器(GDB)的基本使用方法(之一)

 

调试流程:

1、   带着调试选项编译、构建调试对象

2、   启动调试器

1)        设置断点

2)        显示栈帧

3)        显示值

4)        继续执行

 

准备

gcc –Wall –O2 –g

Makefile中添加 CFLAGS = -Wall –O2–g

configure脚本 ./configure CFLAGS=”-Wall–O2 –g”

启动

设置断点

break (b)

格式

         break:

函数名

行号

文件名:行号

文件名:函数名

+偏移量

-偏移量

*地址

运行

run (r) 开始运行程序,到断点处停住

start (s) 开始运行程序,到main函数的第一条语句处停住

显示栈帧

backtrace (bt)

别名:where / info stack(info s)

格式:

         backtrace  显示所有栈帧

         backtraceN     显示N个栈帧

         backtrace–N   只显示最后N个栈帧

         backtracefull 显示局部变量。可与N配合使用

显示变量

print (p)

显示寄存器

l  info reg 显示寄存器

l  在寄存器之前添加$,可显示各个寄存器的内容,(gdb)p$eax

显示寄存器可使用的格式

格式

说明

x

显示为16进制

d

显示为十进制

u

显示为无符号十进制

o

显示为八进制

t

显示为二进制,t的由来是two

a

地址

c

显示为字符ascii

f

浮点小数

s

显示为字符串

i

显示为机器语言(仅在显示内存的x命令中可用)

(gdb) p/c $eax

$7 = 97 ‘a’

 

l  x命令可以显示内存的内容。x eXamining

(gdb) x $pc

0x40055e <main+46>:     0x000000b8

(gdb) x/i $pc

=> 0x40055e <main+46>:         mov   $0x0,%eax

一般使用x命令时,格式为x/NFU ADDR

         N:重复次数

         F:前面讲到的格式(x/d/u/o/t/a/c/f/s/i)

         U:单位,如下

单位

说明

b

字节

h

半字(2字节)

w

(2字节)

g

双字(8字节)

l  反汇编命令disassembledisas

格式

         diss  (反汇编当前整个函数)

diss 程序计数器(反汇编程序计数器所在函数的整个函数)

diss 开始地址结束地址(反汇编从开始地址到结束地址之间的部分)

单步执行

l  next (n) 执行源代码中一行的命令

l  step (p) 进入函数内部执行

继续运行

l  continue (c) <次数>

监视点

l  watch <表达式>

表达式发生变化时暂停运行

l  rwatch <表达式>

表达式被访问量暂停运行

删除断点和监视点

l  delete <编号>

删除<编号>指示的断点或监视点

l  info b 显示断点

其他断点

l  hbreak 硬件断点,适用于ROM空间等无法修改的内在区域中的程序。

l  tbreak/thbreak 临时断点/临时硬件断点,与断点/硬件断点相同,都会运行到此处暂停,不同之处是临时断点/临时硬件断点会在此时被删除,即只暂停一次。

改变变量的值

set variable <变量>=<表达式>

生成内核转储文件

l  generate-core-file

l  命令gcore <pid>也可以直接转储文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张无印

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值