gdb调试多进程,多线程

一:普通命令

1.list命令
list linenum 显示程序第linenum行周围的程序
list function 显示函数名为function的函数的源程序
list 显示当前行后面的源程序
list - 显示当前行前面的源程序

这里写图片描述

2.run(r) 运行命令。

3.break(b) 打断点,使用方法:
b linenum 在某行打断点
关闭断点:delete(d) breakpoint-id(标号)
查看断点:info b

这里写图片描述

4.单步命令
step count 一次性执行count步,如果有函数会进入函数
next count 一次执行count,不进入函数
finish 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值以及参数信息
until 退出循环体

这里写图片描述

5.continue命令
当程序被停住之后,可以使用continue(c)命令,恢复程序的运行直到程序结束,或到达下一个断点。这里要注意如果没有断点程序是会直接结束的。

6.print(p)命令
这个命令比较常用,用来查看我们想看的内容。比如有关数组可以看全部,也可以看从左到右某一部分:

print命令针对变量查看的输出格式有:
x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十六进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量t 按二进制格式显示变量
a 按十六进制格式显示变量
c 按字符格式显示变量
f 按浮点数格式显示变量

7.watch命令
这个命令比较有用。watch一般用来观察某个表达式(变量也是一种表达式)的值是否有变化,如果有变化,马上停住程序。我们有一下几种方法设置观察点:
watch expr 为表达式expr设置一个观察点,一旦表达式值有变化,马上停住程序
rwatch expr 当表达式expr被读时,停住程序
awatch expr 当表达式的值被读或被写时,停住程序。
info watchpoints 列出所有观察点(info指令通常可以去套)
举例如下,演示观测*i的值,一旦变化停下来:

在循环中我们也可以使用watch,配合ignore,它是除了until命令之外又一个可以让我们跳出循环的方法,不过watch+ignore更强大,可以任意跳转到第i次循环。它们的意思就是观察一个变量,可以理解为断点,ignore这个断点多少次,然后用continue就可以直接跳过了。

8.examine命令 使用该命令来查看内存地址中的值。
语法是:x/u addr addr表示一个内存地址。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容;
f 表示显示的格式,如果地址所指的是字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i;
u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4字节。

u参数可以被一些字符代替:b表示单字节,h表示双字节,w表示四字节,g表示八字节。
当我们指定了字节长度后,GDB会从指定的内存地址开始,读写指定字节,并把其当作一个值取出来。

n、f、u这3个参数可以一起使用,例如命令“x/3uh 0x54320”表示从内存地址0x54320开始以双字节为1个单位(h)、16进制方式(u)显示3个单位(3)的内存。

9.j

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值