调试器(GDB)的基本使用方法(之一)
2015-05-21 14:46
267 查看
调试流程:
1、 带着调试选项编译、构建调试对象
2、 启动调试器
1) 设置断点
2) 显示栈帧
3) 显示值
4) 继续执行
准备
gcc –Wall –O2 –gMakefile中添加 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)显示寄存器
linfo reg 显示寄存器
l 在寄存器之前添加$,可显示各个寄存器的内容,(gdb)p$eax
显示寄存器可使用的格式
格式 | 说明 |
x | 显示为16进制 |
d | 显示为十进制 |
u | 显示为无符号十进制 |
o | 显示为八进制 |
t | 显示为二进制,t的由来是two |
a | 地址 |
c | 显示为字符ascii |
f | 浮点小数 |
s | 显示为字符串 |
i | 显示为机器语言(仅在显示内存的x命令中可用) |
$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字节) |
格式
diss (反汇编当前整个函数)
diss 程序计数器(反汇编程序计数器所在函数的整个函数)
diss 开始地址结束地址(反汇编从开始地址到结束地址之间的部分)
单步执行
lnext (n) 执行源代码中一行的命令
l
step (p) 进入函数内部执行
继续运行
lcontinue (c) <次数>
监视点
lwatch <表达式>
表达式发生变化时暂停运行
l
rwatch <表达式>
表达式被访问量暂停运行
删除断点和监视点
ldelete <编号>
删除<编号>指示的断点或监视点
l
info b 显示断点
其他断点
lhbreak 硬件断点,适用于ROM空间等无法修改的内在区域中的程序。
l
tbreak/thbreak 临时断点/临时硬件断点,与断点/硬件断点相同,都会运行到此处暂停,不同之处是临时断点/临时硬件断点会在此时被删除,即只暂停一次。
改变变量的值
set variable <变量>=<表达式>生成内核转储文件
lgenerate-core-file
l 命令gcore <pid>也可以直接转储文件
相关文章推荐
- 调试器(GDB)的基本使用方法(之一)
- 调试器(GDB)的基本使用方法(之二)
- 调试器(GDB)的基本使用方法(之三)
- gdb基本使用方法简介
- gdb基本使用方法
- GDB调试器使用方法总结
- gdb基本使用方法
- gdb基本使用方法及常用命令
- gdb基本使用方法
- gdb基本使用方法
- gdb基本使用方法
- gdb基本使用方法
- gdb基本使用方法及常用命令
- GDB调试基本使用方法
- gdb调试器的使用方法小结,转载版
- 使用HTML5在网页中嵌入音频和视频播放的基本方法
- Python中常用包——sklearn主要模块和基本使用方法
- android中intent的基本使用方法
- GDB tui使用方法
- vi/vim 基本使用方法