GCC调试工具在CentOS怎么用
小樊
35
2025-12-21 08:22:42
在 CentOS 上使用 GCC 的调试工具
一 安装与准备
- 安装编译与调试工具:
- 安装 GCC 与 GDB:sudo yum install gcc gdb -y
- 如需 C++:sudo yum install gcc-c++ -y
- 验证版本:gcc --version、gdb --version
- 编译时务必加入调试信息:gcc -g -O0 -o app app.c(推荐用 -O0 关闭优化,便于逐行调试;发布时再用合适的优化级别)。
二 使用 GDB 进行本地调试
- 启动与基本流程:
- 启动:gdb ./app
- 设置断点:break main 或 break app.c:10
- 运行:run(可带命令行参数:run arg1 arg2)
- 单步:next(不进入函数)、step(进入函数)
- 继续:continue
- 打印与栈:print var、backtrace(或 bt)
- 退出:quit
- 常用增强命令:
- 查看源码:list(或 l)
- 观察点:watch var(变量被修改时中断)
- 栈帧与局部变量:frame N、info locals
- 条件断点:break 行号 if 条件
- 运行参数:set args arg1 arg2
- 修改变量:set var x=10
- 小示例(调试前确保已用 -g 编译):
- gcc -g -O0 -o hello hello.c
- gdb ./hello
- (gdb) break main
- (gdb) run
- (gdb) next / step / print / continue / bt / quit
三 远程与内存调试
- 远程调试(gdbserver):
- 目标机上:gdbserver :1234 ./app
- 本机上:gdb ./app → (gdb) target remote <目标机IP>:1234
- 内存与泄漏检测(Valgrind):
- 基本:valgrind --leak-check=full ./app
- 更详细:valgrind --tool=memcheck --leak-check=full --track-origins=yes ./app
- 提示:Valgrind 会显著降低运行速度,适合定位内存错误与泄漏。
四 常见问题与实用建议
- 断点不停或变量不可见:通常是未用 -g 编译或开启了优化;请使用 gcc -g -O0 重新编译。
- 缺少调试符号提示(如 “Missing separate debuginfos”):按提示安装对应 debuginfo 包,例如执行:debuginfo-install glibc-<版本号>(常见于 CentOS 7)。
- 源码行号对不上:发布包或编辑器修改导致行号偏移;尽量使用与运行二进制一致的源码版本进行调试。
- 多线程程序:在 GDB 中使用 info threads、thread N 切换线程,配合 break 与 continue 定位竞态与死锁。
- 自动化构建:在 Makefile 中区分调试与发布配置,例如:
- CFLAGS_DEBUG = -g -O0 -Wall
- CFLAGS_RELEASE = -O2 -DNDEBUG
- debug: gcc $(CFLAGS_DEBUG) -o $(TARGET) $(SRC)
- release: gcc $(CFLAGS_RELEASE) -o $(TARGET) $(SRC)。