gbd程序调试

gdb基本命令

在这里插入图片描述
开始调试:
首先使用gcc命令完成源代码文件的编译
编译完成后,通过gdb命令 进入调试模式
在这里插入图片描述

【基本操作】

简写全称含义
b 7break在第7行设断点
rrun运行程序
p iprint打印变量i
nnext单步执行
display i监控变量i(=n后p的执行效果)
undisplay取消监控
回车重复执行上一条命令
kill杀死正在调试的程序
ccontinue继续运行您的程序 (在停止之后,比如在一个断点之后)
infoinformation查看信息
set设置变量的值 set var=value
file指定源代码位置
watch为当前表达式设置观察点

【断点操作】

  • b break 设置断点

  • info b 显示断点信息
    在这里插入图片描述
    可以看到此时Enb(enable)的值为 y

  • disable 1(1为断点的Num值)将断点关闭
    在这里插入图片描述
    可以看到此时Enb(enable)的值为 n,且此时执行r(run)命令时,程序执行过程中没有中断,直接执行到了程序结束

  • dl +断点数字编号 删除断点

  • clear 删除所有断点

  • enable 1 将断点开启在这里插入图片描述
    此时执行程序过程中遇到Breakpoint后中断

【函数堆栈操作】

函数栈层向上:up
向下:down
fr (frame):显示当前所在层次
frame n/简写:fr n
移动到第n层,n为栈的层次,然后可以用其他命令(info)查看此级别的变量信息
backtrace:查看函数调用的顺序(函数调用栈的信息)

【watch 命令】

watch < expr>
为表达式(变量)expr设置一个观察点,一旦其数值有变化,程序立即停止运行
rwatch < expr>
当表达式expr被时,程序立即停止运行
awatch < expr>
当表达式expr 的值 被读或被写时程序立即停止运行
info watchpoints
列出当前所设置的所有观察点

【参数操作】

set args (参数列表) 向调试的程序传递参数
info args 查看当前函数的参数名及其值
show args 显示程序实际收到的参数

【x(examine)命令】

查看指定地址的内存地址的值
语法:
x /<n/f/u> <addr>
n 是一个正整数, 表示显示内存的长度 ,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式 ,参见上面。如果地址所指的是 字符串 ,那么格式可以是 s
u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes 。 u 参数可以用下面的字符来代替, b 表示单字节, h 表示双字节, w 表示四字节, g 表示八字节。当指定了字节长度后, GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

<addr>表示一个内存地址。
n/f/u三个参数可以一起使用。例如:

命令: x/3uh 0x54320 表示,从内存地址 0x54320读取内容, h表示以双字节为一个单位, 3表示三个单位, u表示按十六进制显示。

x命令帮助文档:
在这里插入图片描述
示例:
源代码
在这里插入图片描述
查看数组变量a:数组长度为5,即向后查看5个地址的内容,以十进制整数形式(d),int数据类型以四个字节一个单位(w) 因此命令为 x /5dw a
在这里插入图片描述
如果错误选择字节数(int数据类型存储时以四个字节为一个单位),会打印错误的值
如:此时选择双字节h
在这里插入图片描述
选择错误的数据类型也会打印错误的值,如将浮点型数组 f 用d打印
在这里插入图片描述
打印字符串时,会分别打印实际的值以及它的ASCII编码
在这里插入图片描述
如果打印的值是指针变量,用p命令只能查看指针指向的内存地址的第一个元素的值
在这里插入图片描述
但使用examine命令可以查看
在这里插入图片描述

【函数调用命令】

在这里插入图片描述
finish(fi):直接将函数剩余的部分执行完,并返回调用值
until :执行到当前所在的循环结束为止
until+命令行号: 运行到某行代码为止
info locals :显示函数内的局部变量信息
kill:杀死当前正在运行的进程

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Asio otus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值