当前位置: 首页 > news >正文

gdb调试命令大全

基本命令

#gdb test test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。
start : 指令会执行程序至main() 主函数的起始位置,即在main() 函数的第一行语句处停止执行(该行代码尚未执行)
continue : 从断点位置继续运行
r(un) : 指令会一直执行程序,直到执行结束。 如果程序中手动设置有断点,则run 指令会执行程序至第一个断点处。在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和shell通配符(*、?、[、])在内。

n(ext) : 单步运行,逐过程调试C 代码Style
s(tep) : 单步运行,逐语句调试,C Style

n(ext)i : 单步运行,逐过程调试汇编代码
s(tep)i : 单步运行,逐语句调试汇编代码,si/s 都可以

finish : 如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish
until : 结束当前循环
whatis : 显示变量或函数类型
quit : 退出gdb

file tools/system : 添加sourceMap文件tools/system
directory /Users/Linux/Linux-0.11-on-mac: 指定源码路径"/Users/Linux/Linux-0.11-on-mac "
source a 应用gdb命令脚本 a,可以在脚本中添加一系列断点,避免每次调试都需要设置这些断点。更多参考

断点

info b 查看断点,information break的缩写
break n 在n行处设置断点
tbreak n/ tbreak func 设置临时断点,到达n行或函数func 后被自动删除
break main.c:10  在main.c文件第10行设置断点
break 0x3400a   在内存0x3400a处设置断点
break 10 if i==3  设置条件断点,在循环中使用非常方便

clear 10    清除第10行的断点,清除时GDB会给出提示
delete 3    对第10行 清除断点和自动显示的表达式的命令,清除时GDB不会给出任何提示
disable/enable 3  让所设断点暂时 关闭/开启,如果要让多个编号处的断点失效/使能,可将编号之间用空格隔开
awatch/watch i   设置一个观察点,当变量i 被读出或写入时程序被暂停
rwatch i      设置一个观察点,当变量i 被读出时,程序被暂停

查看源代码

list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。
list 12:将显示当前文件以“12行”为中心的前后10行代码,
list main:将显示“main”所在函数的源代码,

查看运行信息

info program :查看程序的是否在运行,进程号,被暂停的原因。
p i 显示变量值i,在程序暂停时,键入"p 变量名"(print)即可,GDB在显示变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"$N",而无需写冗长的变量名;

display 查看变量或表达式的值,例如: display /x i,以16进制显示变量i的值。它与print的区别是,每当程序暂停执行(例如单步执行)时,GDB 调试器都会自动帮我们打印出来,而 print 命令则不会。 参考

watch i 观察变量,在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;

i register 打印寄存器的值,输出不包括浮点寄存器和向量寄存器的内容
i all-registers 输出所有寄存器的内容
i registers eax”或者“p $eax 打印eax寄存器的值, 参考

where/bt :当前运行的堆栈列表
bt /backtrace/info stack :显示当前调用堆栈
bt full :查看完整的调用堆栈信息,包括每个栈帧中所有变量和参数的信息。
up/down :改变堆栈显示的深度
set args :指定运行时的参数
set args [arguments] :传递命令行参数
show args :查看设置好的参数

gdb查看内存数据

格式: x /nfu 例如: x /20xh 0x7fffffffe080

说明:
x 是 examine 的缩写,意思是检查。

n表示要显示的内存单元的个数,比如:20

f表示显示方式, 可取如下值:

x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。

u表示一个地址单元的长度:

b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节

layout

(gdb) layout src 显示源代码窗口

(gdb) layout regs 显示寄存器窗口

(gdb) layout asm 显示汇编代码窗口

(gdb) layout split 显示源代码和汇编代码

info win 显示窗口的大小

layout next 切换到下一个布局模式

layout prev 切换到上一个布局模式

focus cmd/src/asm/regs/next/prev 切换当前窗口

refresh 刷新所有窗口

update 更新源代码窗口和当前执行点

http://www.lryc.cn/news/391998.html

相关文章:

  • ESP32之arduino环境安装及点灯
  • 查看VUE中安装包依赖的版本号
  • 博途通讯笔记1:1200与1200之间S7通讯
  • Kafka搭建(集群版)
  • 【康复学习--LeetCode每日一题】3115. 质数的最大距离
  • 【yolov8系列】ubuntu上yolov8的开启训练的简单记录
  • Scala学习笔记15: 文件和正则表达式
  • 外卖员面试现状
  • 异步加载与动态加载
  • MUNIK解读ISO26262--什么是DFA
  • 启动spring boot项目停止 提示80端口已经被占用
  • SOLIDWORKS分期许可(订阅形式),降低前期的投入成本!
  • 详细分析Spring Boot 数据源配置的基本知识(附配置)
  • 海思SD3403/SS928V100开发(15)9轴IMU ICM-20948模块SPI接口调试
  • 大力出奇迹:大语言模型的崛起与挑战
  • 【算法 - 哈希表】两数之和
  • 【深度学习】图形模型基础(5):线性回归模型第一部分:认识线性回归模型
  • 2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛B题超详细解题思路+数据预处理问题一代码分享
  • Yarn有哪些功能特点
  • 深度学习算法bert
  • PyTorch - 神经网络基础
  • docker-compose搭建minio对象存储服务器
  • vue3使用pinia中的actions,需要调用接口的话
  • Python酷库之旅-第三方库Pandas(003)
  • 社交电商中的裂变营销利器,二级分销模式,美妆家具成功案例分享
  • 【国产开源可视化引擎Meta2d.js】图层
  • 基于Redisson实现分布式锁
  • Android Studio下载Gradle特别慢,甚至超时,失败。。。解决方法
  • leetcode--二叉树中的最长交错路径
  • c++ primer plus 第15章友,异常和其他:15.1.3 其他友元关系