gdb常用调试命令-2
gcc -g -o test test.c
gdb 或 gdb ./test
(gdb) file ./test
(gdb) r
Hello, World!
----------
调试代码:
run(r):运行代码
next(n):单步跟踪,函数调用当作一条简单语句执行
step(s):单步跟踪,函数进入被调用函数体内
finish : 退出进入的函数
until(u):退出一个循环体
continue(c):继续运行程序
查看运行时数据
print(p):打印变量、字符串、表达式等值
----------
共有三种设置断点的方法,分别是break(b), watch, catch throw type(如int)
设置断点(break)
b (break) 行号 # 设断点
b 函数名
b 文件名路径:行号 # 以上三种是设置断点的方法
b 行号-or-函数名 if i==9 #设置条件断点
b *(&bret) # 数据断点的打法,先取数据的地址,再往该地址上打断点,当该地址上的值改变时就会停下
i b :查看断点信息,具体信息如下:
断点编号(Num)、断点类型(Type)、是临时断点还是永久断点(Disp)、目前是启用状态还是禁用状态(Enb)、断点的位置(Address)、断点当前的状态(作用的行号、已经命中的次数等,用 What 列表示)
whatis #打印该变量的类型
- 使用watch打断点,为hardware watch point
watch bret # 当bret值变化时,断点
watch *(&bret) # 地址打法
watch condition # 条件变量打法,如 watch (bret != 1)
i watch # 查看watch设置的断点
- 删除
d (delete) 编号 #删除编号处(不是行号)的断点,如 d 1; d 1-10 # 删除第1到10个编号
clear 行号(或变量地址) # 有两种方法,分别时delete和clear,前者使用编号后者使用行号
- 禁用
disable [breakpoints] [num...]
disable # 禁止所有的断点
disable 1 2 # 表示禁用编号为1和2的断点
- 启用
enable [breakpoints] [num...]
enable num # 表示启用断点,dismiss禁用
enable once num # 表示可使用一次,之后仍然禁用
enable count num # 使用count次后,之后仍然禁用
enable delete num # 使用一次后,就删除该断点
bt:打印栈帧信息
找不到源代码,可使用list
若使用list命令无效,记住gdb的调试信息中并不包含源代码,
这个需要通过directory命令实现,由于某中原因,源代码移动
位置,则需要告诉gdb,gdb就会根据指定的路进查找,查看gdb
的查找路径:
show directories
dir dirname1:dirname2:dirname3
有时使用-g没有调试信息,可改成
-gstabs试一试,若还是不太理想,可使用
-gstabs+
list(l)行号:显示行号
l :从main函数开始
l 函数名
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?