温馨提示×

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 --versiongdb --version
  • 编译时务必加入调试信息:gcc -g -O0 -o app app.c(推荐用 -O0 关闭优化,便于逐行调试;发布时再用合适的优化级别)。

二 使用 GDB 进行本地调试

  • 启动与基本流程:
    • 启动:gdb ./app
    • 设置断点:break mainbreak app.c:10
    • 运行:run(可带命令行参数:run arg1 arg2
    • 单步:next(不进入函数)、step(进入函数)
    • 继续:continue
    • 打印与栈:print varbacktrace(或 bt
    • 退出:quit
  • 常用增强命令:
    • 查看源码:list(或 l
    • 观察点:watch var(变量被修改时中断)
    • 栈帧与局部变量:frame Ninfo 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 threadsthread N 切换线程,配合 breakcontinue 定位竞态与死锁。
  • 自动化构建:在 Makefile 中区分调试与发布配置,例如:
    • CFLAGS_DEBUG = -g -O0 -Wall
    • CFLAGS_RELEASE = -O2 -DNDEBUG
    • debug: gcc $(CFLAGS_DEBUG) -o $(TARGET) $(SRC)
    • release: gcc $(CFLAGS_RELEASE) -o $(TARGET) $(SRC)。

0