Cxxdroid 中文文档 下载 App

移动端调试器入门 —— Cxxdroid 内置 gdb

为什么需要调试器

编译报错告诉你的是「代码写得不对」,但运行时错误(segmentation fault、内存泄漏、死循环、逻辑 bug)编译器管不了。调试器的作用是让程序停在你指定的位置,然后你可以:

Cxxdroid 调试器的定位

官方选择 gdb 是因为它:

但 Cxxdroid 的 gdb 有几个明显限制:

功能Cxxdroid 状态桌面 IDE 状态
断点✅ 支持行断点✅ 行断点 + 条件断点 + 表达式断点
单步✅ Step Over / Into / Out✅ 完整
变量查看✅ 当前作用域变量✅ 当前 + Watch 任意变量
调用栈✅ 支持✅ 支持 + 每个帧的变量
内存检查❌ 无✅ Valgrind / AddressSanitizer
性能分析❌ 无✅ CPU/GPU 分析器
远程调试❌ 无✅ 跨设备远程

启动调试

与「编译运行」不同,调试模式需要:

  1. Debug 模式编译:在编译选项里开启 -g(生成调试符号),关闭 -O2 等优化(优化后的代码和源码对应关系模糊)
  2. 启动调试会话:点击「调试」按钮(或菜单选「Debug」),应用会启动 gdb 子进程并加载你的可执行文件

调试界面

典型的界面布局:

调试界面:断住后显示变量值和调用栈

调试的核心流程

  1. 在你想停下来的代码行设置断点
  2. 启动调试模式编译 + 运行
  3. 程序运行到断点处自动停下
  4. 查看当前变量值,分析状态
  5. 如果还没找到原因,单步执行一行,再停下看变量
  6. 重复 5 直到定位到 bug 根源
  7. 修复代码,重新编译调试

典型的调试场景

空指针解引用(Segfault)程序崩溃了,开启调试模式运行到崩溃点——调试器会在崩溃行自动停住,显示此时所有变量值,很容易找到是哪个指针为 null。

循环不退出程序看起来「卡死」了——开启调试,在循环体内设断点,观察循环条件变量每次迭代是否在正常变化。

逻辑错误程序能跑完但输出不对——在关键判断点设断点,看条件表达式两侧的变量值到底是什么。

与桌面调试的体验差异

桌面 CLion 的调试面板可以:

Cxxdroid 调试器不支持这些高级功能,但核心的断点 + 单步 + 变量值查看足够应对大部分运行时错误。如果遇到极其复杂的调试需求,建议手机上写好草稿、换到桌面 IDE 上深度调试。