首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux开发工具的使用(三):gdb

Linux开发工具的使用(三):gdb

作者头像
我想吃余
发布2025-08-21 08:46:21
发布2025-08-21 08:46:21
15300
代码可运行
举报
文章被收录于专栏:C语言学习C语言学习
运行总次数:0
代码可运行

Linux的调试器——gdb

  • 我们知道,程序的发布方式有两种,debug模式和release模式。
    • debug模式:调试模式,通常不进行优化或优化级别很低,便于调试,包含完整的调试符号和行号信息,生成的可执行文件较大,运行速度较慢。
    • release模式:发布模式,启用高级优化,提高代码执行效率,通常移除或减少调试信息,禁用断言,可执行文件较小,运行速度更快。
  • 在Linux gcc/g++ 出来的二进制程序,默认是release模式
  • 因此,要使用gdb调试,必须在源代码生成二进制程序的时候,设为debug模式。、

设为debug模式方法: 在生成可执行代码的时候,加上-g选项:

代码语言:javascript
代码运行次数:0
运行
复制
gcc -o mycode_debug mycode.c -g
开始使用

在第一次使用gdb时,需在root用户下安装gdb:

代码语言:javascript
代码运行次数:0
运行
复制
yum install -y gdb
1. 开始调试
代码语言:javascript
代码运行次数:0
运行
复制
gdb [debug模式的可执行文件]
2. 结束调试

ctrl + dquit 调试命令

3. 显示源代码
代码语言:javascript
代码运行次数:0
运行
复制
l(list) [行号]

一次指令可从指定的行号向下显示10行代码,且具有记忆性(继续回车可以再往下显示10行代码) 因此,如果我们想要显示完整代码,可以从第0行开始回车显示,即:l 0

代码语言:javascript
代码运行次数:0
运行
复制
l(list) [函数名]

列出某个函数的源代码。

4. 逐语句与逐过程
  • n 或 next:逐语句,单条执行,相当于vs的F10
  • s 或 step:逐过程,可以进入函数调用,相当于VS的F11
5. 运行到断点
  • r或run:运行程序。相当于VS的F5。 如果没有断点,就运行整个程序。
6. 打断点
  • b或break + 行号:在该行设置断点。
  • b或break + 函数名:在该函数开头设置断点
  • info break :查看断点信息。
  • delete 断点号:删除该序号的断点
  • delete:删除所有断点
  • disable + 断点号:禁用断点
  • enable + 断点号:启用断点
  • continue(或c):运行到下一个断点

注意:断点号在断点信息里查看

7. 其他常用运行指令
  • continue(或c):运行到下一个断点
  • until + 行号:跳到指定行
  • finish:运行完当前函数

💡:这三个指令可以帮助我们限定出问题的上下文

8. 监视变量
  • display + 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • info display:查看被监视的变量的信息
  • undisplay + 变量编号:取消对该变量的跟踪
  • undisplay:取消对先前设置的那些变量的跟踪
9. 查看函数调用情况及参数

breaktrace(或bt):查看函数调用情况及参数

10. 查看当前栈帧局部变量的值

info locals:查看当前栈帧局部变量的值

11. 修改变量的值

set var:修改变量的值

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux的调试器——gdb
    • 开始使用
      • 1. 开始调试
      • 2. 结束调试
      • 3. 显示源代码
      • 4. 逐语句与逐过程
      • 5. 运行到断点
      • 6. 打断点
      • 7. 其他常用运行指令
      • 8. 监视变量
      • 9. 查看函数调用情况及参数
      • 10. 查看当前栈帧局部变量的值
      • 11. 修改变量的值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档