gdb调试(指令积累)
一、开启gdb调试
gdb + 文件名
二、r 运行
三、b 设置断点
可以给函数名下断点,也可以给行号下断点,也可以设置条件断点
删除断点:
1、Clear
Clear 删除指定位置处的所有断点
Clear + 行号
2、delete
delete 删除编号为2的断点
3、disable
禁用断点
所谓禁用,就是使目标断点暂时失去作用,必要时可以再将其激活,恢复断点原有的功能。
disable breakpoint [n] :禁止指定断点
enable breakpoint [n] :允许指定断点
四、q 停止调试
五、file命令加载程序
注意,使用file的前提好像是需要在编译时加入 -g 选项,创建符号表
六、list 命令(l)
显示代码,注意,使用list前必须使用file加载程序
七、c
Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。
八、s
Step into 单步步入
九、n
相当于step over 单步跟踪
十、ni与si
使用si和ni,与s与n的区别在于:s与n是C语言级别的单步调试,si与ni是汇编级别的单步调试。
十一、info 打印详细信息
比如:
1、info registers 显示寄存器的信息
2、Info b 显示断点信息
3、Info line 查看运行到了第几行
4、info win 显示窗口的大小
十二、p
Print 命令 ,打印指定变量(临时变量或全局变量)的值
P /d 以10进制的方式查看
十三、x
1、演示
X指令显示指定地址的数据
图中x /1dg 1,表示显示一个存储单元 ,d表示以10进制的形式显示,g表示一个存储单元有8字节
2、格式:x/<n/f/u> <addr>
n 表示存储单元的个数 即从当前地址向后显示n个内存单元的内容
f 表示数据输出的格式
u表示一个存储单元所占的字节
对于f数据输出的格式:
x表示输出为16进制
d表示输出为10进制
u 表示16进制无符号整形
o 表示八进制
t 表示二进制
a 表示16进制
c 表示字符类型
f 表示浮点格式
对与u存储单元所占字节:
b=1 byte, h=2 bytes,w=4 bytes,g=8 bytes.
十四、j 指令
Jmp 加行号,直接跳到第几行
十五、bt
打印调用栈
十六、whatis
查看某个变量的类型
十七、display
使用display后,会打印当前变量的值,并且,以后每一次单步都会打印这个变量的值
(gdb) display
expr
(gdb) display/fmt expr
expr 表示要查看的目标变量或表达式;参数 fmt 用于指定输出变量或表达式的格式
display 命令和 /fmt 之间不要留有空格
十八、layout
1、layout split :显示源代码和汇编代码
并且随调试动态改变
2、layout next,layout prev
layout next :切换到下一个布局模式
layout prev :切换到上一个布局模式
3、layout src,layout asm
layout src :只显示源代码,退出方法为Ctrl+X+A
layout asm :只显示汇编代码
4、tui
在图中
tui reg next :显示下一组寄存器
tui reg system :显示系统寄存器
5、update
更新源代码窗口和当前执行点
6、Ctrl组合
Ctrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。
7、实时看到寄存器变化
使用gdb时增加-tui选项,打开gdb后运行layout regs
命令。注意最好加上-tui,否则很大可能会出现花屏现象。
十九、set logging on
设置日志文件
会记录我们调试的时候的所有输出,适合调试大量的文件
二十、shell
去掉我们终端的命令
比如 shell ls ll
可以查看目录中的文件信息
二十一、watch
watchpoint
可以加变量
1、观察变量是否变化
可以看到,每当断点的地址发生变化的时候,就会打印出来
2、删除
这也是一种特殊的断点,可以用delete 加断点号去掉:
二十二、调试core文件
在Linux下程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。
但是一般linux限制core文件的生成,我们需要解除限制
1、 显示目前资源限制的设定。
ulimit –a
可以看到core文件的生成受到限制
2、 解除限制
ulimit -c unlimited
3、 gda加core文件查看问题
gdb 可执行文件 core文件
执行后gdb会直接跳到出问题的代码段并显示问题原因
二十三、调试正在运行的进程
Gdb –p 进程号 即可
参考:
https://www.bilibili.com/video/BV1EK411g7Li?from=search&seid=15693799557804781069&spm_id_from=333.337.0.0
__EOF__

本文链接:https://www.cnblogs.com/lordtianqiyi/articles/15811109.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现