GDB知识点

3 篇文章 0 订阅
1 篇文章 0 订阅

基本操作

生成包含调试信息的可执行文件

gcc -g test.c -o test

进入gdb调试

gdb test

查看所载入的文件

(gdb) l

设置断点

在程序第六行设置断点(breakpoint)

(gdb) b 6

查看断点

(gdb) info b

运行程序

(gdb) r

查看栈信息

(gdb) bt

查看变量值

variable为变量名称

(gdb) p variable

单步运行

单步运行有两种,”n“(next)和”s"(step),“s“可以调试程序直接进入调用函数,而”n"不行。

(gdb) n

or

(gdb) s

恢复程序运行

(gdb) c

工作环境相关命令

gdb工作环境相关命令

命令格式含义
set args运行时的参数指定运行时参数,如 set args 2
show args查看设置好的运行参数
Path dir设定程序的运行路径
show paths查看程序的运行路径
set environment var [=value]设置环境变量
show environment [var]查看环境变量
cd dir进入dir目录
Pwd显示当前目录
shell command运行shellcommand命令

设置断点与恢复命令

gdb设置断点与恢复相关命令

命令格式含义
info b查看所有断点
break[文件名:]行号或函数名<条件表达式>设置断点
tbreak[文件名:]行号或函数名<条件表达式>设置临时断点,到达后自动删除
delete[断点号]删除指定断点,其断点号为"info b"中的第一栏。若缺省断点号默认删除所有断点。
disable[断点号]停止指定断点,可以查看,功能与delete类似。
enable[断点号]激活断点。
condition[断点号]<条件表达式>修改对应断点的条件
ignore[断点号]忽略对应断点num
Step单步恢复程序运行,且进入函数调用
Next单步恢复程序运行,但不进入函数调用
Finish运行程序,直到当前函数完成返回
C继续执行函数,直到函数结束或遇到新的断点

gdb中源码查看相关命令

gdb中源码查看相关命令

命 令 格 式含义
list <行号> |<函数名>查看指定位置代码
file [文件名]加载指定文件
forward-search 正则表达式源代码的前向搜索
reverse-search 正则表达式源代码的后向搜索
dir DIR将路径 DIR 添加到源文件搜索的路径的开头
show directories显示源文件的当前搜索路径
info line显示加载到 gdb 内存中的代码

gdb中查看运行数据相关命令

gdb 查看运行数据相关命令

命 令 格 式含义
print 表达式变量
x <n/f/u>查看内存变量内容。其中 n 为整数表示显示内存的长度,f 表示显示的格式,u 表示从当前地址往后请求显示的字节数
display 表达式设定在单步运行或其他情况中,自动显示的对应表达式的内容
backtrace查看当前栈的情况,即可以查到哪些被调用的函数尚未返回

一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样,你可以使用GDB的数据显示格式:

GDB数据显示格式

符号参数含义
x按十六进制格式显示变量。
d按十进制格式显示变量。
u按十六进制格式显示无符号整型。
o按八进制格式显示变量。
t按二进制格式显示变量。
a按十六进制格式显示变量。
c按字符格式显示变量。
f按浮点数格式显示变量。

调试C语言文件

tb.c
这里写图片描述
命令行输入:
linux> gcc -O1 -o tb tb.c
linux> gdb tb

进入gdb.

如图所示:
这里写图片描述

设置断点1:

gdb> b vframe

设置断点2:

gdb> b main
(b=break)
这里写图片描述

运行文件:

gdb> r
到达第二个断点停止。如图(r = run):
这里写图片描述

反汇编main函数:

gdb> disassemble main
如图:
这里写图片描述

设置调试运行显示汇编指令:

gdb> display /5i $pc
5i表示显示5条汇编指令。如图:
这里写图片描述

查看各寄存器

gdb> i r
如图(i r = info registers):
这里写图片描述

逐条运行

gdb> si
如图(si = stepi):
这里写图片描述

使用examine命令来查看内存地址中的值。

x(简写是x)命令的语法如下所示:
x/<n/f/u> <addr>

n、f、u是可选的参数。

符号参数含义
n正整数。表示显示内存单元的个数。
f显示格式。如果所指的是字符串,则为s;如果为指令地址,则为i
u表示从当前地址往后请求的字节数,默认为4bytesb表示单字节;h表示双字节;w表示四字节;g表示八字节。

示例:
x/2x $(rsp+16)    ⟹    \implies 打印输出16(%rsp)的值

参考文章

参考:《嵌入式Linux应用程序开发标准教程》作者:华清远见

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值