温馨提示×

ubuntu下gcc调试方法有哪些

小樊
37
2025-12-20 06:07:05
栏目: 智能运维

Ubuntu下使用 GCC 的调试方法与工具

一 基础准备与编译选项

  • 安装常用开发工具:sudo apt install build-essential(包含 gcc/g++/gdb 等)。
  • 编译时务必加入调试信息:gcc/g++ -g -o app app.c;若希望兼顾优化与可调试性,使用 -Og
  • 开启更严格的警告有助于提前发现问题:加上 -Wall -Wextra -pedantic,必要时指定标准如 -std=c99/-std=c++11
  • 说明:优化级别(如 -O2/-O3)会重排/内联代码,可能使单步与变量观察变得困难,调试阶段优先用 -O0/-Og

二 使用 GDB 进行源码级调试

  • 启动与断点:gdb ./app;在 main 或某文件行号处设断点,如 break main 或 break file.c:10
  • 运行与单步:run 启动;next 逐行不进函数;step 进入函数;continue 到下一断点。
  • 观察与栈回溯:print var 查看变量;display var 持续打印;watch var 变量改变时中断;backtrace/bt 查看调用栈;info breakpoints 管理断点;thread/info threads 查看与切换线程。
  • 崩溃定位:段错误时进入 gdb 执行 run,崩溃后用 bt 查看回溯定位问题源。

三 运行时与内存错误检测工具

  • AddressSanitizer(ASan):gcc -fsanitize=address -o app app.c;运行 ./app 即可报告越界、使用未初始化内存等问题,定位精确。
  • Valgrind(内存与调用分析):sudo apt install valgrind;常用命令:valgrind –leak-check=full --track-origins=yes ./app;还可进行性能分析:valgrind –tool=callgrind ./app,用 kcachegrind 可视化结果。
  • 系统调用与库调用跟踪:strace ./app 跟踪系统调用;ltrace ./app 跟踪动态库函数调用,适合排查启动失败、文件/网络/库依赖等问题。

四 二进制与符号信息查看

  • objdump:objdump -d app 反汇编;objdump -t app 查看符号表。
  • readelf:readelf -a app 查看 ELF 头、节区、程序头等详细信息。
  • nm:nm app 列出符号及其地址,辅助确认链接与未定义引用等问题。

五 IDE 与编辑器集成

  • VS Code:安装 C/C++ 扩展,配置 launch.json(type: cppdbg, MIMode: gdb, miDebuggerPath: /usr/bin/gdb),配合 tasks.json 使用 gcc -g 构建;支持断点、变量/栈查看、集成终端等。
  • LLDB:sudo apt install lldb;lldb ./app 使用与 gdb 类似的断点/单步/打印/回溯命令,适合偏好 LLDB 的开发者。

0