lldb
为什么学习LLDB
工作中花大量时间调试
lldb 减少调式时间,增加乐趣
不写不必要的打印 log 代码
学习 LLDB 是一个高回报的时间投资
LLDB 是什么
LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具。
固定语法
<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
<command>
(命令)和<subcommand>
(子命令):LLDB调试命令的名称。命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。<action>
:执行命令的操作<options>
:命令选项<arguement>
:命令的参数[]
:表示命令是可选的,可以有也可以没有当你使用命令选项的时候,需要在命令选项后面加--区分命令选项和参数。
expression
简写
- expr
后面 跟表达式
-
表达式
-
表达式(expression)是值、变量和运算符的组合。 值自身也被认为是一个表达式,变量也是,因此下面都是合法的表达式:
42
n
n +5
-
等同于p & print & call
—
等同于不加
--: 命令选项结束符,表示所有的命令选项已经设置完毕,如果没有命令选项,--可以省略
-O
-
后面必须加 —
expression -O -- self
等于 po
按固定 模板 格式 输出
po [[NSString alloc] initWithFormat:@"Item index is: %d", index]v
thread
thread backtrace
打印 线程的 堆栈信息
-
简写
- bt
thread return
- 让函数直接返回一个值,不会执行函数后面的代码
thread continue
-
简写
- c
-
作用
- 过掉当前断点
thread over
-
作用
-
执行当前 行的 代码
- 会把 子函数一步运行
-
-
简写
next
n
thread step-in
-
简写
step
s
-
作用
-
单步运行
- 遇到子函数会进入子函数
-
thread step-out
-
简写
-
finish
- 不是 f
-
-
作用
-
执行完当前函数的全部代码
- 返回上一个函数
-
指令级别的 命令
-
Instruction level
- 指令级别的
-
汇编
-
一句源码
可能会转成多个 汇编 代码
NSLog 四句汇编
-
-
thread step-inst-over
-
nexti
-
ni
- 汇编一句一句进行
-
-
-
thread step-inst
-
stepi
-
si
汇编一句一句进行
遇到汇编函数,会进入汇编函数内部
-
-
frame
frame variable
-
打印 当前 栈帧的变量
- 得到的结果和 Xcode 断点时 左边导航的堆栈 调用 面板相似
如果你 逆向的话 是在 命令行里 执行命令,不是在 Xcode 里执行命令,所以你要 掌握这个命令
breakpoint
简写
- br
breakpoint list
-
列出所有的断点
- 每个断点都有自己的编号
breakpoint enable 断点编号
启用该编号的断点
-
简写
- en
breakpoint delete 断点编号
- 删除该编号的断点
breakpoint disable 断点编号
禁用该编号的断点
-
简写
- dis
breakpoint set
-
-a
- 函数地址
-
-n
函数名
—name
-
string
里面 哪个控制器的 方法方法
“-[SKTGraphicView alignLeftEdges:]”
-
结果
-
lldb) br set -n loadData
- >Breakpoint 2: 4 locations意思是 你设置了 断点编号为 2的断点
-
locations
- 当前命令 设置了 4处断点
-
-
-r
- 正则表达式
-
-s
动态库
-
-n
- 函数名
-
breakpoint set --file foo.c --line 12
-
-f
在某个文件打断点
—file
-
-l
在 某一行打断点v
—line
-
breakpoint command
-
add 编号
-
给当前编号的断点填加操作
- 执行普通代码
最后输入 Done 结束操作
-
-
delete 编号
- 删除当前编号断点的所有操作
-
list 编号
- 当前断点设置了哪些操作
watchpoint
设定 观察点
- 这个值 被执行 写入操作时就会 断住
set
variable
expression
list
disable 编号
enable 编号
delete 编号
command
add
list
delete
image
lookup
-
-a 地址
根据内存地址 查找哪一行的 代码
Xcode 运行 程序时 OC 的代码错误崩溃 经常停在 main 函数,这个时候
-
-t 类型
- 查找某个类型的信息
type lookup
类名
- 查看一个类
tips
help
-
help 命令
-
help + 命令
- 查看这个命令的具体使用
-
查看详细的文档
- lldb 值得花时间学习
-
enter 键
- 重复上面的操作
尽量不使用
- 简写
如果你使用lldb 改变了界面显示内容想立刻看到更改后的效果
-
oc
- e (void) [CATransaction flush]
-
swift
-
p CATransaction.flush()
breakpoint set --selector viewDidLoad
-
p CATransaction.flush()