GDB 学习笔记
GDB 学习笔记
在使用 gdb
进行调试时,编译时需要加上 -g
参数,以确保生成包含调试信息的可执行文件。
常用命令
程序控制
-
run(r)
[arg1 arg2 ...]
从头开始运行程序直到结束或遇到断点,后面可以添加命令行参数。 -
continue(c)
从当前位置开始继续执行,直到下一个断点或程序结束。 -
next(n)
执行一行代码,停在下一行代码。不会进入函数内部。 -
step(s)
单步执行,遇到函数调用时进入函数内部。 -
finish
执行完当前函数并返回到调用此函数的那一行。 -
reverse-next(rn)
逆向执行代码一步,返回到上一条已执行的代码。
说明:reverse-*
系列命令要求gdb
支持逆向调试功能(可能需要开启记录模式)。
断点和观察点
-
break(b)
[location]
在指定位置(如main
或行号)设置断点。 -
watch
<variable>
设置观察点,当指定变量的值发生变化时暂停程序执行并打印变化。 -
info breakpoints
显示所有断点及观察点的信息。 -
delete
<breakpoint_id>
删除指定 ID 的断点;不加 ID 将删除所有断点。
栈帧与调用栈
-
backtrace(bt)
显示当前调用栈,列出每个栈帧的函数及参数信息。 -
up
[num]
切换到调用栈中的上num
层(更接近主函数)栈帧。 -
down
[num]
切换到调用栈中的下num
层(更接近当前函数调用)栈帧。
变量和表达式
-
print(p)
<expression>
打印表达式或变量的值。 -
display
<expression>
每次程序停止时自动显示表达式的值。 -
undisplay
<display_id>
停止显示指定的自动打印项。 -
whatis
<variable>
打印变量的类型信息。 -
set var
<variable>=<value>
设置变量的值。
代码浏览
- list(l)
显示当前代码行的上下文。可以用list <行号>
查看指定行附近的代码。
退出调试
- quit(q)
退出gdb
。
备注
gdb
支持多种参数和脚本方式,建议在调试复杂项目时使用脚本化方法来简化调试流程。- 有些高级命令(如逆向命令)需要
gdb
支持记录模式,可通过target record
启动。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构