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 启动。
posted @   鳯先生  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示