在 Ubuntu 上用 GCC 调试程序,通常分为「编译带调试信息 → 用 gdb 调试 → 常见排错手段」几个步骤。下面给你一套实用流程。
sudo apt update
sudo apt install build-essential gdb
build-essential:包含 gcc、g++、makegdb:调试器gcc -g -O0 main.c -o main
参数说明:
-g:生成调试信息-O0:关闭优化(否则变量可能被优化掉,调试很痛苦)✅ 调试时一定要用 -O0
gdb ./main
或调试正在运行的程序:
gdb -p <pid>
| 命令 | 作用 |
|---|---|
run / r |
运行程序 |
break main |
在 main 函数下断点 |
break file.c:10 |
在某一行下断点 |
next / n |
单步(不进入函数) |
step / s |
单步(进入函数) |
print x / p x |
打印变量 |
backtrace / bt |
查看调用栈 |
frame 0 |
切换栈帧 |
continue / c |
继续执行 |
quit / q |
退出 |
示例:
break main
run
next
print a
backtrace
./main
gdb ./main
run
崩溃后:
bt
可看到哪一行导致段错误。
ulimit -c unlimited
运行程序产生 core 文件。
gdb ./main core
bt
CFLAGS = -g -O0
main: main.c
gcc $(CFLAGS) main.c -o main
printf("x=%d\n", x);
gcc -Wall -Wextra -g main.c -o main
sudo apt install valgrind
valgrind ./main
cgdb(终端增强)ddd如果你有:
可以直接贴出来,我可以一步步帮你调。