LLDB Console 常见用法

围巾🧣 2025年05月01日 61次浏览

在 Android Studio 调试 NDK 时,LLDB Console 是一个非常强大的工具,可以在断点时以命令行方式操作 native 层的调试器。

下面是 LLDB 常用命令清单,适合 Android Native 调试场景使用:


🧭 基础命令

命令 含义
help 查看所有 LLDB 命令的帮助信息
quit 退出 LLDB 会话
clear 清除 console 输出

🧵 线程与栈帧操作

命令 含义
thread list 查看当前线程列表
thread select <id> 选择要调试的线程(例如 thread select 2
btthread backtrace 查看当前线程的调用栈
frame select <id> 切换到指定栈帧(frame)
up / down 在调用栈中上移或下移一个栈帧

🔎 变量查看

命令 含义
frame variable 查看当前函数所有局部变量
frame variable <var> 查看某个变量值,例如 frame variable ptr
expr <expression> 执行表达式,例如 expr ptr->name
p <var>p *<ptr> 打印变量或解引用指针,pexpr 的别名
memory read <addr> 查看内存内容,例如 memory read 0x12345678

🎮 程序执行控制

命令 含义
continue / c 继续执行程序
steps 单步进入(step into)
nextn 单步跳过(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]

小技巧

  • expr 会编译并执行表达式,支持 C/C++ 语法,可以用来“改值”:

    expr myVar = 42
    
  • command alias 可以简化输入:

    command alias b breakpoint set --name
    b my_native_function