LLDB
指令
https://www.jianshu.com/p/c91f843a64fc
p
打印 :
输出值+值类型+引用名+内存地址(xcode中有内存地址,其它平台不确定)
常量的进制转换:
//转16进制
(lldb) p/x 100
(int) $9 = 0x00000064
//转8进制
(lldb) p/o 100
(int) $10 = 0144
修改变量(根据地址) :
(lldb) p a1
(int) $9 = 12
(lldb) p $9 = 20
(int) $9 = 20
po
打印 :
输出值
expression
修改值 :
(lldb) expression width = 80
(CGFloat) $6 = 80
打印 :
输出值+值类型+引用名
call
在断点调用某个方法,并输出此方法的返回值 :
(lldb) call width
(CGFloat) $12 = 70
打印 :
输出值+值类型+引用名
Thread
堆栈打印 thread backtrace :
(lldb) bt
打印当前堆栈信息
(lldb) bt 10
10条当前堆栈信息
thread return
跳出当前方法的执行, 有返回值可以直接返回一个值 :
//跳出方法
(lldb) thread return
//让带有返回int值的方法直接跳出,并返回值10
(lldb) thread return 10
流程控制
(lldb) c
继续:continue
(lldb) n
下一步:next
(lldb) s
进入:step
(lldb) f
跳出:finish
2
(lldb) frame select 1
跳转到第1帧 :
(lldb) frame select 1
frame #1: 0x0000006) at xxViewController.m:597
594 break;
595
596 case 3: {
-> 598 cell.textSelect = ^(UITextField *text) {
599 weakSelf.curruntText = text;
600 };
frame variable
查看帧变量(相关对象地址信息列表)
Image 镜像
image lookup -address 查找崩溃位置
崩溃地址0x00000001009a9f3a对应代码位置:
(lldb) image lookup -a 0x00000001009a9f3a
Address: DiDi[0x0000000100609f3a] (DiDi.__TEXT.__text +
6323194)
Summary: DiDi`-[MyHomeTableView
tableView:cellForRowAtIndexPath:] + 1322 at MyHomeTableView.m:243
image lookup -name 查找方法来源
方法loadData:来源 :
(lldb) image lookup -n loadData:
image lookup –type 查看成员
查看某个class类的所有属性和成员变量 :
(lldb) image lookup -t PageContentModel
返回方法和属性
breakpoint
Xcode可手动添加断点,移除,查看断点列表,修改 等等
通过 b 命令也可以, 比如:
当前所有断点数 :
(lldb) b list
Breakpoint 8: 5 locations.
一共5个文件中有8个断点
条件断点
编辑断点,在condition中设置i==5, 则循环到i为5时就会触发断点
等等
LLDB插件
chisel下载
https://github.com/facebook/chisel
安装插件后可以使用一些高级命令
(lldb) methods p1
查看p1对象所有方法
(lldb) pviews
显示当前页面对象层级信息
taplog
点击控件会打印其信息
show
(lldb) show 0xa345262727
显示某个对象
hide
(lldb) hide 0xa345262727
隐藏控件
border
给对象增加边框
unborder 删除边框
pclass
打印对象的继承关系
presponder
命令打印响应链
caflush
这个命令会重新渲染,即可以重新绘制界面
pbundlepath
打印app路径
pdocspath
打印文档路径