在 Android Studio 调试 NDK 时,LLDB Console 是一个非常强大的工具,可以在断点时以命令行方式操作 native 层的调试器。
下面是 LLDB 常用命令清单,适合 Android Native 调试场景使用:
🧭 基础命令
命令 |
含义 |
help |
查看所有 LLDB 命令的帮助信息 |
quit |
退出 LLDB 会话 |
clear |
清除 console 输出 |
🧵 线程与栈帧操作
命令 |
含义 |
thread list |
查看当前线程列表 |
thread select <id> |
选择要调试的线程(例如 thread select 2 ) |
bt 或 thread backtrace |
查看当前线程的调用栈 |
frame select <id> |
切换到指定栈帧(frame) |
up / down |
在调用栈中上移或下移一个栈帧 |
🔎 变量查看
命令 |
含义 |
frame variable |
查看当前函数所有局部变量 |
frame variable <var> |
查看某个变量值,例如 frame variable ptr |
expr <expression> |
执行表达式,例如 expr ptr->name |
p <var> 或 p *<ptr> |
打印变量或解引用指针,p 是 expr 的别名 |
memory read <addr> |
查看内存内容,例如 memory read 0x12345678 |
🎮 程序执行控制
命令 |
含义 |
continue / c |
继续执行程序 |
step 或 s |
单步进入(step into) |
next 或 n |
单步跳过(step over) |
finish |
执行当前函数直到返回(step out) |
process status |
查看程序运行状态 |
🎯 断点管理
命令 |
含义 |
breakpoint list |
查看所有断点 |
breakpoint set --file <file> --line <line> |
在特定文件和行设置断点 |
breakpoint set --name <func> |
在指定函数设置断点(例如 breakpoint set --name JNI_OnLoad ) |
breakpoint delete <id> |
删除断点 |
breakpoint disable <id> |
禁用断点 |
示例场景
# 打印结构体指针字段
expr myStruct->member
# 查看当前函数所有局部变量
frame variable
# 设置断点在 myfile.cpp 第 42 行
breakpoint set --file myfile.cpp --line 42
# 跳入下一条 native 指令
step
# 查看内存中某地址的内容
memory read 0x7ffeefbff5d8
# 打印某个数组元素
expr myArray[3]
小技巧