跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C

Linux 中 GDB 与 CGDB 调试器的使用详解

Linux 下编译代码需添加-g 选项开启调试模式。GDB 是常用命令行调试器,支持断点设置、单步执行(next/step)、变量查看(print/display)及函数栈追踪(backtrace)。CGDB 提供图形化界面,分屏显示代码与调试信息。内容涵盖 GDB 基础命令、断点管理(break/info b/disable/enable)、条件断点、监视点(watch)及常用操作技巧,并整理 GDB 命令分类表,帮助开发者高效定位程序错误。

静心发布于 2026/3/16更新于 2026/9/1065 浏览
Linux 中 GDB 与 CGDB 调试器的使用详解

Linux 下编译与调试基础

Linux 下编译好的代码,默认是 release 模式,无法直接调试。程序要调试的话,必须是 debug 模式,也就是说编译的时候要加 -g 选项。

编译示例

创建一个累加的代码文件 mycode.c:

#include <stdio.h>

int Sum(int s, int e) {
    int result = 0;
    int i = s;
    for (; i <= e; i++) {
        result += i;
    }
    return result;
}

int main() {
    int start = 1;
    int end = 100;
    printf("I will begin\n");
    int n = Sum(start, end);
    printf("running done, result is:[%d-%d]=%d\n", start, end, n);
    return 0;
}

创建 Makefile 文件,生成可调试的文件:

mycode: mycode.c
	gcc -o $@ $^ -g
.PHONY: clean
clean:
	rm -f mycode

运行 make 后生成的可执行文件携带调试信息,可以使用 gdb 进行调试操作。退出 gdb 输入 quit 即可。

GDB 基础命令

查看源代码

显示源代码可以直接输入 list(简写 l)。

  • l 1:从第一行开始查看。
  • 直接回车:显示当前上下文的所有代码。

断点管理

在特定行打断点,程序运行到此处会暂停。

  • b 19:在第 19 行设置断点。
  • info b:查看所有断点的信息(编号、类型、地址等)。
  • d 2:删除编号为 2 的断点。
  • disable 4:禁用编号为 4 的断点。
  • enable 4:启用已禁用的断点。
  • 程序运行控制

    • run(或 r):运行程序。如果之前已运行过,系统会询问是否重新调试。
    • continue(或 c):从当前位置继续运行到下一个断点。
    • next(或 n):单步执行,不进入函数内部(逐过程)。
    • step(或 s):单步执行,进入函数内部(逐语句)。
    • finish:执行完当前函数并返回。
    • until 12:执行到指定行号(常用于跳出循环)。

    变量与表达式

    • p n:打印变量 n 的值。
    • set var flag=1:在不修改源代码的情况下修改变量值。
    • display x:跟踪显示指定变量值,每次停止时自动显示。
    • undisplay 1:取消指定编号的变量显示。
    • info locals:查看当前函数内所有的局部变量。

    调试信息

    • bt:查看当前执行栈的各级函数调用及其参数(回溯调用栈)。

    高级功能

    监视点 (Watchpoint)

    监视某一变量的值,如果发生变化则暂停。

    • watch result:给 result 打硬件断点,当值变化时通知使用者。
    条件断点

    在满足特定条件时才触发断点。

    • b 13 if i == 10:在 13 行打断点,仅当 i=10 时生效。
    • condition 4 i=10:给已存在的 4 号断点添加条件。

    CGDB 图形化调试

    CGDB 提供分屏界面,上屏显示代码,下屏显示调试命令窗口。

    安装

    sudo yum install -y cgdb
    

    使用

    启动 cgdb mycode(传入可执行文件名)。

    • ESC:回到代码屏。
    • i:回到调试窗口屏。
    • l mycode.c :1:从第 1 行开始查看代码。

    在 CGDB 中,断点设置与 GDB 一致。打断点后,对应行号字体变红。运行 run 后,程序会在断点处停下。

    GDB 命令分类表

    类别命令作用示例
    代码查看与导航list/l显示源代码(每次 10 行)list/l 10
    list/l 函数名列出指定函数的源代码list/l main
    list/l 文件名:行号列出指定文件的某行代码list/l mycmd.c:1
    程序运行与调试run/r从程序开始连续执行run
    next/n单步执行,不进入函数内部next
    step/s单步执行,进入函数内部step
    finish执行到当前函数返回,然后停止finish
    continue/c从当前位置开始连续执行程序continue
    until 行号执行到指定行号until 20
    断点管理break/b [文件名:] 行号在指定行号设置断点break 10
    break/b 函数名在函数开头设置断点break main
    info break/b查看当前所有断点的信息info break
    delete/d breakpoints删除所有断点delete breakpoints
    delete/d breakpoints n删除编号为 n 的断点delete breakpoints 1
    disable breakpoints禁用所有断点disable breakpoints
    enable breakpoints启用所有断点enable breakpoints
    变量与表达式print/p 表达式打印表达式的值print start+end
    p 变量名打印指定变量的值p x
    set var 变量=值修改变量的值set var i=10
    display 变量名跟踪显示指定变量值display x
    undisplay 编号取消指定编号的变量显示undisplay 1
    调试信息backtrace/bt查看当前执行栈的各级函数调用backtrace
    info/i locals查看当前帧的局部变量值info locals
    退出调试quit退出 GDB 调试器quit

    调试的本质是找到问题并查看代码上下文。断点将代码切块,以块为单位快速定位出现问题的区域。

    目录

    1. Linux 下编译与调试基础
    2. 编译示例
    3. GDB 基础命令
    4. 查看源代码
    5. 断点管理
    6. 程序运行控制
    7. 变量与表达式
    8. 调试信息
    9. 高级功能
    10. 监视点 (Watchpoint)
    11. 条件断点
    12. CGDB 图形化调试
    13. 安装
    14. 使用
    15. GDB 命令分类表

    更多推荐文章

    查看全部
    • YOLOv8 目标检测 PySide6 可视化 GUI 界面实现
    • Formality 原语(primitive)概念解析
    • Spring Boot 安全认证与授权核心解析
    • llama.cpp 简介:基于 C/C++ 的高性能本地大模型推理框架
    • 如何在 Cursor 中使用 MCP 服务
    • AI 时代打造超级个体:个人效能提升与实战路径
    • 2438. 二的幂数组中查询范围内的乘积 - 位运算解法
    • 智能家居搭建笔记:Home Assistant 与小智 AI 集成
    • LLaMa-Factory 实战:WebUI 参数详解与分布式训练
    • 注意力机制与 Transformer 模型实战:TensorFlow 实现机器翻译
    • OpenClaw 集成本地 llama.cpp 后端配置
    • Python 爬虫基础教程:请求、解析与数据存储
    • GitHub 双重验证失效或无法获取验证码时的账号恢复方案
    • ROS2 Humble 环境下 Mid360 雷达 FAST-LIO 算法部署教程
    • C++ 红黑树核心原理与完整实现
    • 基于 UDP 的手机通话语音局域网传输与 AI 处理 Python 脚本
    • 5 款免费 AIGC 检测工具推荐与降重方法
    • 亥时无人机一体化平台:架构设计与核心功能解析
    • Stable Diffusion v1.5 图片生成:主图/Banner/邮件头图
    • Trae 国际版一周年活动:领取快速请求额度与功能详解

    相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online