gdb常用指令

gdb常用指令

gdb启动

gdb <app>
gdb
attach <pid>
gdb attach <pid>
gdb -p <pidof process>

断点

使用break或者b命令来设置断点

break <filename:linenumber> 在源文件的filename的linenumber处停住
break <funcName> 在函数funcName入口处停住
break +/- offset 在当前行的前/后的offset行处停住
break [args] if [conditions] 在condition条件成立时断住在args条件
clear 清除所有已定义的断点
clear func 清除函数func上所有的断点
delete [breakpoints][range] 删除指定的断点,如果不指定则删除所有的断点,range,eg:delete 1-5
disable/dis [breakpoints][range] 屏蔽断点,程序再执行到断点是不会停止,gdb也不会删除断点,再需要时可以再开启断点。不指定默认屏蔽所有已经设置的断点
enable [breakpoints][range] 开启disable屏蔽的断点
enable once breakpoints 启动断点一次
enable delete breakpoints 启动断点一次之后就删除
enable count numbers breakpoints  启动断点并且只命中断点numbers次
ignore breakpoints numbers 忽略断点前numbers次命中
commands 遇到断点后执行特定的指令
eg: commands 遇到最后一个时要执行的指令
eg: commands n 遇到断点n要执行的指令

函数调用栈

backtrace/bt 打印当前线程的堆栈列表
frame bt_number 跳转到当前堆栈的第bt_number层
thread apply all backtrace(t a a bt) 打印所有线程的堆栈信息

打印

print val
p val
x 按照十六进制显示变量
d 按照十进制显示变量
u 按照十六进制显示无符号整型
o 按照八进制显示变量
t 按照二进制显示变量
a 按照十六进制显示变量
c 按照字符格式显示变量
f 按照浮点数显示变量

b 字节
h 半字节
w 四字节
g 八字节

x/[repeat_count][FMT][size_letters] addr
repeat_count 为打印四次
FMT 打印格式
size_letters 每次打印的字节数

eg: 按照16进制打印128字节
x/32xw arr 16进制打印32次四字节
x/128xb arr 16进制打印128次1字节
whatis 显示某个变量或表达式的数据类型
ptype 显示数据类型,比起whatis的优势在于可以显示typedef定义的类型

单步执行

next(n) 单步跟踪,如果有函数调用,不会进入函数
step(s) 单步跟踪,如果遇到函数调用,则会进入该函数

结束函数

finish 直到当前函数执行完成返回。并打印函数返回值
until <linenumber>
当函数内一个循环次数很多时,单步跟踪就会让人感到烦躁,这个命令可以跳出循环体,或者跳到linenumber行

观察点

观察点一般是使用来观察某个表达式的值是否发生了变化,如果有变化就停止程序。

watch count == 5 当表达式count等于5的时候停止程序

rwatch 变量或表达式被读取时程序就会中断

awatch 无论这个变量被读取还是被写入程序都会发生中断

info watchpoints 产看所有观察点

delete/disable/enable n 删除/禁用/启用 观察点n

查看代码

list filename:number 列出filename文件的第number行代码
list function 列出函数function的代码
list 打印当前函数的一部分代码,默认是当前行向下翻页
list -打印上一次list的代码的前一段代码,类似与向上翻页
show listsize 现在现在默认是一次打印出几行代码
set listsize 设定一次打印出几行代码

查看数组内容

当需要查看一段连续的内存空间的值时。比如数组的一段大小,或者是动态分配的数据的大小。可以使用@符号查看。@的左值是第一个内存的地址的值,右值是你想要查看的内存的长度。

p arr@len
$1 = {1, 2, 3, 4, 5}

或者可以循环打印出数组的每一个值

set $i = 0
while $i < arr.size()
>print arr[$i]
>set $i = $i + 1
>end

$2 = 1
$3 = 2
$4 = 3
$5 = 4
$6 = 5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值