您的位置:首页 > 其它

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

2015-05-21 14:46 267 查看

调试流程:

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 反汇编命令disassemble(disas)

格式

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>也可以直接转储文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: