温馨提示×

Ubuntu C++调试有哪些方法

小樊
42
2025-11-27 11:11:52
栏目: 编程语言

Ubuntu 下可用的 C++ 调试方法概览

  • 命令行调试器:使用 GDB(经典、通用)或 LLDB(LLVM 生态,命令与 GDB 近似)。
  • 图形化与 IDE:如 Visual Studio Code(C/C++ 扩展 + GDB/LLDB)、CLionEclipse CDT 等,提供断点、变量/栈可视化与一键运行调试。
  • 核心转储分析:程序崩溃时生成 core dump,用调试器离线分析现场。
  • 远程与嵌入式:通过 LLDB 连接远程/设备(如 Android)进行调试,支持符号加载与源码路径映射。

命令行调试 GDB 与 LLDB 快速上手

  • 编译时务必加入调试信息:使用 -g;若需更易调试,建议关闭优化(如 -O0)。示例:g++ -g -O0 main.cpp -o main。
  • GDB 常用流程与命令:
    • 启动:gdb ./main
    • 断点:break main 或 break main.cpp:10
    • 运行:run [args]
    • 单步:next(不进函数)/ step(进入函数)
    • 继续:continue
    • 打印:print var
    • 栈回溯:backtrace(bt)
    • 退出:quit
  • LLDB 常用流程与命令(与 GDB 类似):
    • 启动:lldb ./main
    • 设置断点:b main 或 breakpoint set --file main.cpp --line 10
    • 运行:run
    • 单步:n / s
    • 继续:c
    • 打印:print expr 或 frame variable
    • 栈回溯:bt
    • 退出:quit
  • 提示:LLDB 与 GDB 命令存在一一对应关系,上手成本低;在复杂项目或需脚本化时,LLDB 的脚本能力更灵活。

图形化与 IDE 调试

  • Visual Studio Code
    • 安装 VS Code 与 Microsoft C/C++ 扩展。
    • 生成构建任务:Ctrl+Shift+P → Configure Default Build Task → 选择 g++ build active file(生成 tasks.json)。
    • 配置调试:F5 → 选择 C++ (GDB/LLDB),生成 launch.json;常用字段包括 program、args、MIMode(gdb/ lldb)、miDebuggerPath、preLaunchTask。
    • 在代码行号左侧点下断点,F5 启动调试,使用调试工具栏进行单步、继续、查看变量与调用栈。
  • CLion / Eclipse CDT
    • 直接内置 GDB/LLDB 调试支持,提供断点、变量/内存/寄存器视图与 CMake/Makefile 良好集成,适合大型工程。

高级场景与技巧

  • 核心转储分析
    • 开启与生成:ulimit -c unlimited;程序崩溃后生成 core 文件。
    • 分析:gdb ./main core 或 lldb ./main -c core,使用 bt、frame、print 等定位崩溃点。
  • 远程/嵌入式调试(以 LLDB 为例)
    • 连接远程平台:platform select remote-android;platform connect unix-abstract-connect:///data/local/tmp/debug.sock。
    • 附加进程:attach ;设置源码映射:settings set target.source-map <编译时源码路径> <本地源码路径>。
    • 加载未剥离符号:target symbols add <未剥离 .so>;随后可设置断点、单步与查看变量。
  • 条件断点与表达式求值
    • LLDB 条件断点:b main if some_var == 10;运行时求值/修改:expr some_var = 42。
  • 调试优化相关
    • 发布构建常开启优化(如 -O2/-O3),会导致变量被优化、单步与打印不符合直觉;调试时优先使用 -O0 -g,必要时配合编译器选项(如 -fno-omit-frame-pointer)提升可调试性。

0