LLDB 常用指令

413 阅读2分钟

查看指令

help <command>

指令格式

<command> [<subcommand>] <action> [-options [optionvalue]] [argument]
  • command: 命令

  • subcommand: 子命令

  • action: 操作指令

  • options:命令选项

  • argument:命令参数

  • 例如设置断点指令

    breakpoint set -n dismiss
    
    • breakpoint:command
    • set:subcommands
    • -n :options
    • dismiss:argument

image ---- 模块查找指令

  • image list:打印APP现有的模块
  • image lookup
    • -F <函数名>:查找某个函数
    • -t <类名>:查看某个类型
    • -a <内存地址>:查看内存地址对应的代码
    • -n <名>:查找符号或函数的位置

frame ---- 打印当前函数中的参数

  • frame variable简写为var、v
  • frame variable -O简写为vo,打印参数详细信息

language ---- 特定于源语言的命令

  • objc
    • class-table dump <类名>:打印关于类的一些信息
    • tagged-pointer info <地址>:打印tagged-pointer变量的一些信息,可以使用vo查看变量地址信息

register ---- 访问当前线程和寄存器的命令

  • read:读取寄存器存储数据
  • write: 修改单个寄存器的值

breakpoint ---- 用于在断点上操作的命令

  • breakpoint list: 打印所有断点
  • breakpoint set: 添加断点
    • -n <函数名>:根据函数名称设添加断点,相同函数名都会添加上
    • -r <函数名>:模糊匹配添加,函数名包含参数的都会被添加上
    • -s <动态库名称> -n <函数名>:给动态库添加断点
  • breakpoint disable:禁用断点
  • breakpoint enable:启用断点
  • breakpoint delete:删除断点
  • breakpoint command
    • add:在断点出添加一些指令
    • list:打印添加的指令
    • delete:删除指令 上述4个指令都通过编号操作,可以用breakpoint list查看断点编号

watchpoint ---- 在观察点上操作的命令

  • watchpoint set
    • variable <属性名>:根据属性名添加一个内存监听
    • expression <内存地址>:给一个内存地址添加监听
  • watchpoint list:打印监听列表
  • watchpoint disable:禁用监听
  • watchpoint enable:启用监听
  • watchpoint delete:删除监听 上述4个指令都通过编号操作,可以用watchpoint list查看断点编号

expression ---- 执行一个表达式

  • expression 和 expression -- 、print 、 p、 call效果相同
  • expression -O -- 和 po的效果相同

thread ---- 流程控制指令

  • thread backtrace:打印函数调用堆栈
  • thread return:不执行当前断点后面的代码,直接返回
  • thread continue̵: 过掉断点,程序继续运行(但具体操作时进程会被卡死),指令 continue̵、c为相同指令
  • thread step-over:单步运行,执行函数时不跳入函数体,next、n为相同指令
  • thread step-in:单步运行,执行函数时跳入函数体,step、s为相同指令
  • thread step-out:执行当前函数所有代码,返回调用函数,finish为相同指令
  • thread step-inst-over: 汇编指令一步一步调用,遇到函数执行不仅进入,ni为相同指令
  • thread step-inst: 汇编指令一步一步调用,遇到函数执行且进入,si为相同指令