跳到主要内容
极客日志极客日志面向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/10/2196 浏览
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 命令分类表

    更多推荐文章

    查看全部
    • 5 大 AI 代码生成工具实测:DeepSeek-Coder 在测试场景的实战表现
    • C++ 类和对象:拷贝构造函数与赋值运算符重载详解
    • Electron 实战:按需构建与打包体积优化
    • 激光雷达点云配准:ICP 与 NDT 算法深度解析
    • 基于 Retinaface 与 CurricularFace 的人脸身份核验方案
    • 基于 PSO-DWA 融合的无人机三维动态避障路径规划及 Matlab 实现
    • C++ 函数重载:核心规则、匹配机制与实战
    • Milvus 实战:Attu 可视化安装与 Python 整合指南
    • Java 集合框架核心:List、Set 与 Map 的差异解析
    • Python 实战:构建文档总结、代码生成与智能检索助手
    • PentAGI 基于 Docker 的 AI 自动化渗透环境部署指南
    • Windows 上安装 Docker Desktop 与配置 WSL2
    • DeepSeek 深度使用指南:提示词技巧与本地知识库搭建
    • 自动驾驶激光雷达运动畸变与鬼影处理及核心实现
    • 时序数据库选型指南:工业物联网场景首选 Apache IoTDB
    • 普元 Mobile SlidePage 子页面数据刷新方案
    • 算法模拟法解题实战
    • MarianCG:受机器翻译启发的代码生成 Transformer 模型
    • CCF-GESP 2025 年 6 月二级 C++ T2 幂和数
    • LoRA 训练助手:快速生成 Stable Diffusion 专业训练标签

    相关免费在线工具

    • 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