温馨提示×

怎么在CentOS用GDB调试

小樊
36
2026-08-19 07:36:57
栏目: 智能运维

CentOS 上使用 GDB(GNU Debugger) 调试程序,基本流程如下。我会从 安装 → 编译 → 启动调试 → 常用命令 逐步说明,适合初学和实际使用。


一、安装 GDB

CentOS 7 / 8 / Stream

sudo yum install -y gdb

如果提示找不到包(极少情况):

sudo yum install -y epel-release
sudo yum install -y gdb

验证安装:

gdb --version

二、编译程序(非常关键)

必须使用 -g 选项,否则 GDB 看不到源码和变量信息。

示例

// test.c
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int x = 10;
    int y = 20;
    int z = add(x, y);
    printf("result = %d\n", z);
    return 0;
}

编译:

gcc -g -o test test.c

不要加 -O2 等优化选项,否则调试时变量可能被优化掉。


三、启动 GDB

1️⃣ 直接调试程序

gdb ./test

2️⃣ 运行程序

在 GDB 中:

run

或带参数运行:

run arg1 arg2

四、常用 GDB 调试命令(重点)

1️⃣ 设置断点

break main
break test.c:8
break add

2️⃣ 运行程序

run

3️⃣ 单步执行

next      # 下一步(不进入函数)
step      # 进入函数

4️⃣ 查看变量

print x
print add(1,2)

5️⃣ 查看堆栈

backtrace
bt

6️⃣ 继续执行

continue

7️⃣ 查看源码

list
list main

8️⃣ 删除断点

info breakpoints
delete 1

五、调试崩溃程序(core dump)

1️⃣ 开启 core dump

ulimit -c unlimited

2️⃣ 运行程序,产生 core 文件

./test

(如果发生段错误,会生成 corecore.xxx

3️⃣ 使用 GDB 分析

gdb ./test core

查看崩溃位置:

bt

六、调试正在运行的程序

1️⃣ 查找进程 PID

ps -ef | grep test

2️⃣ 附加调试

gdb -p PID

退出:

detach
quit

七、常用调试技巧

✅ 查看指针内容

print *ptr

✅ 查看内存

x/10xw ptr

✅ 条件断点

break test.c:10 if x == 5

八、常见问题

❓ 看不到源码

✅ 编译时没加 -g
✅ 源码路径变了

❓ 变量显示 <optimized out>

✅ 不要使用 -O2


九、学习建议

gdb ./test
help

GDB 内置帮助非常详细。


如果你愿意,可以告诉我:

  • ✅ 调试 C / C++ / Go / Python
  • ✅ 是否 段错误 / 死循环 / 多线程
  • ✅ 是否 线上服务器

我可以给你 针对性的调试方案

0