gdb常用调试命令

📂 日博365规模好大 ⏳ 2025-11-21 15:43:37 👽 admin 👁️ 4088 💾 536
gdb常用调试命令

以下是 GDB 10.2 的常用调试命令分类整理,涵盖基本调试、断点管理、变量查看、多线程/多进程调试等场景,方便快速查阅:

1. 启动与退出

命令

说明

gdb <可执行文件>

启动 GDB 并加载程序

gdb --args <程序> <参数>

带参数启动程序

gdb -p

附加到正在运行的进程

★ quit 或 q

退出 GDB

2. 运行程序

命令

说明

run 或 r

从头运行程序 该命令有些版本不支持

run

带命令行参数运行 该命令有些版本不支持

★ continue 或 c

继续运行到下一个断点

kill

终止正在调试的程序

Ctrl+C

中断程序执行(暂停)

3. 断点管理

命令

说明

★ break <函数名> 或 b main

在函数入口设断点

★ break <文件:行号> 或 b src.c:10

在指定文件的某行设断点

break *<地址> 或 b *0x4005a0

在内存地址处设断点

break if <条件> 或 b 10 if x==5

条件断点

info breakpoints 或 i b

查看所有断点

★ delete <编号> 或 d 2

删除指定断点

clear <位置> 或 clear main.c:10

删除某位置的断点

disable/enable <编号>

禁用/启用断点

4. 单步执行

命令

说明

★ next 或 n

执行下一行(不进入函数)

★ step 或 s

执行下一行(进入函数)

nexti 或 ni

执行下一条机器指令(不进入函数)

stepi 或 si

执行下一条机器指令(进入函数)

finish

执行到当前函数返回

until 或 u

执行到当前循环结束

5. 查看代码与堆栈

命令

说明

★ list 或 l

显示当前行附近的代码

list <函数名>

显示指定函数的代码

list <文件:行号>

显示指定位置的代码

backtrace 或 bt

查看调用栈(栈帧)

frame <编号> 或 f 1

切换到指定栈帧

info frame

查看当前栈帧详细信息

6. 查看变量与内存

命令

说明

★ print <变量> 或 p x

打印变量值

print/x <变量>

十六进制格式打印

print/d <变量>

十进制格式打印

print/t <变量>

二进制格式打印

display <变量>

每次停顿时自动打印变量

undisplay <编号>

取消自动显示

x/<格式> <地址>

查看内存(如 x/4xw &x)

格式说明

x=十六进制, d=十进制, t=二进制, w=4字节, h=2字节

7. 修改程序状态

命令

说明

set var <变量>=<值>

修改变量值(如 set var x=10)

jump <行号或地址>

跳转到指定位置继续执行

return

强制当前函数立即返回

8. 多线程/多进程调试

命令

说明

info threads

查看所有线程

thread

切换到指定线程

thread apply all <命令>

对所有线程执行命令(如 thread apply all bt)

set follow-fork-mode child/parent

设置跟踪子进程或父进程

9. 共享库调试

命令

说明

info sharedlibrary

查看已加载的共享库

set solib-search-path /path

设置共享库搜索路径

set sysroot /path

设置目标机的系统根目录

sharedlibrary <库名>

手动加载共享库符号

10. 高级命令

命令

说明

watch <变量>

设置观察点(变量被修改时暂停)

catch throw

捕获 C++ 异常

tui enable

启用文本用户界面(分屏模式)

record full

开启执行记录(支持反向调试)

reverse-step

反向执行(需先 record full)

11. 调试核心转储文件gdb <可执行文件> # 加载 core dump

bt # 查看崩溃时的调用栈

示例调试流程

编译带调试信息的程序:gcc -g -o demo demo.c

启动 GDB:gdb ./demo

设置断点并运行:(gdb) b main

(gdb) run

单步调试:(gdb) n # 下一行

(gdb) s # 进入函数

(gdb) p x # 打印变量

常见问题解决

断点无效:检查编译时是否加了 -g,或尝试 break *<地址>。符号未加载:用 set solib-search-path 指定库路径。多线程调试混乱:用 thread apply all bt 查看所有线程堆栈。

掌握这些命令后,可以高效调试大多数 C/C++ 程序问题。如需更复杂功能(如 Python 脚本扩展),可查阅 GDB 官方文档。

相关数据包

手机司机版的出行软件排行榜TOP10推荐

手机司机版的出行软件排行榜TOP10推荐

📅 09-14 🔗 365邮箱验证
解冻鱼第二天还能吃吗

解冻鱼第二天还能吃吗

📅 10-07 🔗 365bet足球比分直播
[讨论]驱动软件你用哪个?

[讨论]驱动软件你用哪个?

📅 07-10 🔗 日博365规模好大
人工智能包括哪些方面

人工智能包括哪些方面

📅 08-16 🔗 365bet足球比分直播
← 挼搓是什么意思 大家都在用哪些团队知识库软件?语雀等12款主流知识库对比 →