在 Debian 上用 GCC 调试程序,通常是指 编译时加入调试信息 + 用 gdb 调试。下面按常见流程一步步说明。
sudo apt update
sudo apt install gcc gdb
如果是 C++ 程序:
sudo apt install g++ gdb
// hello.c
#include <stdio.h>
int main() {
int a = 10;
int b = 0;
int c = a / b; // 故意制造错误
printf("%d\n", c);
return 0;
}
-g)gcc -g hello.c -o hello
✅ -g:生成调试信息(必须)
✅ 不要加 -O2 等优化,否则调试会混乱
gdb ./hello
进入 GDB 提示符:
(gdb)
| 命令 | 作用 |
|---|---|
run / r |
运行程序 |
break main |
在 main 函数设断点 |
break hello.c:6 |
在第 6 行设断点 |
next / n |
单步执行(不进入函数) |
step / s |
单步执行(进入函数) |
print a |
打印变量 |
backtrace / bt |
查看调用栈 |
continue / c |
继续执行 |
quit / q |
退出 GDB |
(gdb) break main
(gdb) run
(gdb) next
(gdb) print a
(gdb) continue
如果程序崩溃:
(gdb) run
Program received signal SIGFPE, Arithmetic exception.
(gdb) backtrace
ulimit -c unlimited
再次运行程序:
./hello
会生成 core 或 core.<pid> 文件。
gdb ./hello core
然后:
bt
如果是 Makefile 项目,确保:
CFLAGS = -g -Wall
然后:
make clean
make
gdb ./your_program
❌ 没有加 -g
gcc hello.c -o hello
→ 调试信息缺失,GDB 很难用
❌ 开启优化
gcc -O2 -g hello.c
→ 变量可能被优化掉
✅ 推荐:
gcc -g -O0 -Wall hello.c
gdb tui:带源码窗口的 GDBcgdb:更友好的 GDB 前端sudo apt install cgdb
cgdb ./hello
如果你愿意,可以把 你的程序代码 / 报错信息 / 想调试的问题 发出来,我可以一步步帮你分析。