news 2026/4/22 11:19:11

Linux 调试神器 gdb/cgdb 实战指南:从基础用法到高级技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 调试神器 gdb/cgdb 实战指南:从基础用法到高级技巧

Linux 调试神器 gdb / cgdb 实战指南
(从零基础到生产环境能用得上,2025–2026 年仍然最实用的内容)

先回答最核心的三个问题

  1. gdb 和 cgdb 有什么本质区别?
    gdb → 纯命令行(功能最全,但交互体验差)
    cgdb → gdb 的前端(在终端里提供类似 vim 的界面 + 代码高亮 + 分屏)

  2. 什么时候用 gdb,什么时候用 cgdb?

    • 只用 gdb:远程调试、核心 dump 分析、脚本自动化、容器内无图形界面
    • 优先 cgdb:本地开发、本机有终端、需要频繁看源代码、单步跟踪逻辑
  3. 现代替代品已经很多了,为什么还要学 gdb/cgdb?
    因为在以下场景中,gdb 仍然无可替代(或性价比最高):

    • 核心 dump 分析(线上崩溃)
    • 多线程死锁/竞争
    • 信号处理异常
    • 远程调试(ssh + gdbserver)
    • 没有 IDE 的环境(容器、嵌入式、老服务器)
    • 需要极致控制(汇编级、寄存器、内存)

一、最快上手 cgdb(推荐新手第一步)

安装(主流发行版)

# Ubuntu/Debiansudoaptinstallcgdb# CentOS/RHEL/Fedorasudodnfinstallcgdb 或sudoyuminstallcgdb# Archsudopacman -S cgdb

最常用启动方式(带源码调试)

# 编译时一定要加 -g (最好再加 -O0)gcc -g -O0 -otesttest.c# 方式1:最推荐cgdb ./test# 方式2:带参数cgdb --args ./test arg1 arg2# 方式3:附加到已运行进程cgdb -p<pid>

cgdb 界面快捷键速查(必须记住前 8 个)

按键作用备注
F5运行到 main(或继续)最常用
F6下一行(next)不进入函数
F7单步进入(step)进入函数内部
F8跳出当前函数(finish)非常实用
Ctrl + L刷新屏幕(界面乱了按这个)经常需要
:进入 gdb 命令模式想输入复杂命令时
q退出 cgdb
Ctrl + x Ctrl + a切换焦点(代码窗口 ↔ 命令窗口)很重要!
b 行号/函数名设置断点b main / b 42 / b func
ccontinue(继续执行)
rrun(从头重新运行)

二、gdb 核心命令分层速查表(生产最常用)

1. 程序启动与退出类

(gdb) run [参数] # 启动程序(r / run) (gdb) run < input.txt # 重定向输入 (gdb) kill # 杀死当前被调试程序 (gdb) quit # 退出 gdb

2. 断点管理(最核心)

b main # 在 main 函数入口设置断点 b file.c:123 # 指定文件 + 行号 b func if x > 10 # 条件断点 info breakpoints # 查看所有断点(i b) delete 1 # 删除 1 号断点 clear main # 清除 main 处的断点 disable 2 # 禁用 2 号断点(不禁用编号) enable 2 # 重新启用

3. 单步执行家族(必背)

n / next # 下一行(不进入函数) s / step # 单步进入(进入函数) finish # 执行到当前函数返回 until 行号/地址 # 运行到指定行/地址 c / continue # 继续运行到下一个断点/信号

4. 查看数据(最常用组合)

p / print 变量名 # 最常用 p *array@10 # 打印数组前10个元素 p /x 变量 # 十六进制 p /t 变量 # 二进制 p $rax # 看寄存器(x86_64) display /i $pc # 每次停下显示当前指令(汇编) info locals # 当前栈帧局部变量 info args # 当前函数参数 bt / backtrace # 调用栈(崩溃必看) frame 2 # 切换到第2层栈帧

5. 线程与多线程调试

info threads # 查看所有线程 thread 2 # 切换到 2 号线程 break func thread 3 # 只在 3 号线程的 func 处断点 set scheduler-locking on # 只让当前线程运行(排查死锁神器) set scheduler-locking off # 恢复多线程调度

6. 核心 dump 分析(线上最重要)

# 1. 产生 core 文件(需先设置)ulimit-c unlimitedecho"/tmp/core-%e-%p">/proc/sys/kernel/core_pattern# 2. 崩溃后分析gdb ./your_program /tmp/core-your_program-12345# 然后直接 bt、p、info threads 等

三、生产环境中真正高频的高级技巧

  1. 远程调试(ssh + gdbserver)

    被调试机:

    gdbserver :1234 ./your_program arg1 arg2

    本地:

    gdb ./your_program(gdb)target remote 被调试机IP:1234
  2. 条件断点 + 命令列表(自动打印 + 继续)

    break func commands silent # 不显示停顿提示 print x,y,z continue end
  3. 保存/加载断点

    save breakpoints breakpoints.gdb source breakpoints.gdb
  4. watch 监视变量变化(神器)

    watch global_var watch *(int*)0x7fffffffdc40 # 监视某个内存地址
  5. 反汇编 + 寄存器级调试

    disas /m main # 带源码的汇编 layout asm # cgdb 里切换到汇编视图 layout split # 源码+汇编同时看

四、快速进阶建议路线(7–14 天)

Day 1–2:熟练 cgdb 界面 + 基本断点/单步/打印
Day 3–4:掌握条件断点、watch、多线程切换
Day 5–6:练习 core dump 分析(自己 kill -6 制造崩溃)
Day 7+:远程调试 + 真实项目跟踪(nginx/redis/mariadb 源码级调试)

你现在最想先解决哪个痛点?

  • 界面操作不熟练(cgdb 快捷键记不住)?
  • 多线程死锁怎么定位?
  • core 文件打不开 / bt 没符号?
  • 远程服务器上怎么调试?
  • 想看某个具体程序(nginx/redis/mysql)的 gdb 实战案例?

告诉我你的具体场景或卡点,我可以给你针对性的命令序列或调试流程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 10:35:52

好写作AI:还在多个文档间“精神分裂”?让AI分身成你的专项写作助理

当你同时在写开题报告、课程论文和实习总结&#xff0c;大脑是不是已经像一锅同时烧着三道菜的乱炖&#xff1f;毕业论文、课程小论文、实习报告、项目申请书……这些deadline总喜欢扎堆出现&#xff0c;像一群约好来讨债的。在多个写作任务间反复横跳&#xff0c;效率低不说&a…

作者头像 李华
网站建设 2026/4/17 5:37:19

Electron 快速入门教程

Electron 是一个基于 Node.js 和 Chromium 的跨平台桌面应用开发框架&#xff0c;你可以用 HTML、CSS、JavaScript 构建 Windows、macOS、Linux 三端一致的桌面应用&#xff0c;比如 VS Code、Figma 都是基于 Electron 开发的。 本教程会带你从 环境搭建 到 打包第一个应用&am…

作者头像 李华
网站建设 2026/4/21 23:50:15

Python 金融初级学习计划(金融专业学生版)

目录 核心设计原则&#xff08;兴趣提升关键&#xff09; 前置准备&#xff08;1 天搞定&#xff0c;零门槛&#xff09; 1. 工具安装&#xff08;一键完成&#xff0c;不用配环境&#xff09; 2. 数据来源&#xff08;免费无门槛&#xff09; 第一阶段&#xff1a;入门准…

作者头像 李华
网站建设 2026/4/20 13:56:26

CAPTCHA 验证码自动化处理方案

一、验证码在测试中的挑战与自动化必要性 CAPTCHA&#xff08;全自动公共图灵测试&#xff09;是网站防止机器人滥用的核心防护机制&#xff0c;但在软件测试中常成为自动化流程的“绊脚石”。例如&#xff0c;UI自动化测试或持续集成&#xff08;CI&#xff09;流程中&#x…

作者头像 李华
网站建设 2026/4/18 15:07:08

一周之内,32G DDR3由200涨到350

上周电脑升级&#xff0c;32G DDR3 200&#xff0c;觉得贵。 这几天研究了一下存储形式&#xff0c;判断还要大涨&#xff0c;于是就想多买几条。结果已经要350了。

作者头像 李华
网站建设 2026/4/21 12:12:20

硬件架构的艺术:工程师视角下的数字电路设计方法与技术

在数字电路工程里&#xff0c;“功能能跑”只是及格线。真正拉开差距的&#xff0c;是架构是否稳健、时钟是否干净、跨时钟是否可靠、功耗是否可控、系统是否可长期维护。《硬件架构的艺术&#xff1a;数字电路的设计方法与技术》这本书&#xff0c;正是站在工程实践而非纯理论…

作者头像 李华