1. LLDB高级调试插件
这里介绍以下LLDB调试三个好用的插件安装以及简单使用,这三个插件分别是Chisel、DerekSelander/LLDB以及Cycript。
2. Chisel安装及使用
2.1 Chisel的安装
2.1.1 首先安装Homebrew
homebrew安装及介绍
安装报错解决方案
如果安装报错为这个(LibreSSL SSL_read: SSL_ERROR_SYSCALL),就下载下面的sh文件并使用bash执行
homebrew安装文件 密码:84bv
homebrew使用帮助
2.1.2 安装Chisel
Chisel Git地址
安装的时候如果遇到下面的报错:

解决方案,终端输入下面其中一个命令
git -C $(brew --repository homebrew/core) checkout master
or
git -C $(brew --repository homebrew/core) reset --hard HEAD.
如下图所示:

2.2 Chisel的使用
2.2.1 查看视图及其子视图层级
界面如下:

- 使用po命令查看
po [self.view recursiveDescription]

- 使用Chisel命令查看

- 查看当前界面视图层级
pviews

2.2.1 查看视图的父视图的层级
pviews -u self.view

2.2.1 查看当前界面控制器的层级
pvc

2.2.3 查看类的信息
- 查看一个类的父类
pclass 类对象的内存地址

- 查看类中的方法
pmethods 类对象的内存地址

- 查看类中的成员属性
pinternals 类对象的内存地址

2.2.3 查看一个视图所属的控制器
fvc -v 视图对象内存地址
2.2.4 查看当前视图中某一类型视图的所有对象
fv 视图类名

更多使用:请查看其README.md文件
2.2.5 在界面中查找视图
- 闪动视图
flicker 视图对象内存地址
- 在界面中显示视图
vs 视图对象内存地址


3. DerekSelander/LLDB安装及使用
3.1 DerekSelander/LLDB下载及安装
DerekSelander/LLDB Git地址
进入页面后,操作如下图所示:

下载完成后,将LLDB放入到根目录的opt文件夹中,如下图所示:

配置.lldbinit文件,添加如下一行字符串:
command script import /opt/LLDB/lldb_commands/dslldb.py
然后保存,重新编译运行项目就可以使用了。
3.2 DerekSelander/LLDB的基本使用
3.2.1 搜索当前内存中存在的某一个类型的对象
search 类名

3.2.2 使用举例
给注册按钮的响应事件方法添加断点,hook的应用添加符号断点是没有用的,因为这个时候调试符号,内部符号都被脱去了,打不上断点了,如下图所示:

那么如果我们还要想要下断点怎么办呢,可以设置一个内存断点,首先获取当前显示的控制器,然后打印这个控制器中的所有方法及其内存地址,通过方法地址下断点,如下所示:

找到方法名及其地址后,设置一个符号断点,如下所示:


然后点击注册按钮就可以断到断点了。

可以通过sbt命令恢复符号(类的方法符号)查看堆栈信息,如下所示:

3. Cycript介绍及使用
3.1 Cycript的介绍
Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaScript语法的解释器,这意味着我们能够在一个命令中使用Oc或者JavaScript,甚至两者并用。它能够挂钩正在运行的进程,能够在运行时修改很多东西。
Cycript官网
3.2 Cycript的使用
因为我们在之前已经安装好了Monkey了,其中已经内置安装好了Cycript,我们直接使用就可以了。

3.2.1 使用无线网络链接无线设备
-
获取设备IP地址
这个图中的IP地址就是了
-
链接设备
3.2.2 使用举例
-
打印对象信息
-
定义变量
-
打印对象及显示对象的所有成员变量
-
查看视图层级
-
搜索并打印内存中存在的某个类的所有对象信息
使用Cycript的好处就是这种方式不会阻塞住应用程序的进程,很方便。
-
打印当前界面的控制器层级
3.2.3 修改界面
-
修改应用角标数
效果图 -
修改界面显示
界面修改前的显示
执行链接,打印出所有的view
打印当前界面所有的视图对象
或使用下面的命令,输出内容更少一些
打印所有的UILabel对象




3.2.2 脚本自动链接
-
创建文件目录
-
配置环境变量
编辑.zshrc文件
配置路径
自动链接
3.2.2 封装自定义的cy文件
cycript之所以能够使用以上的这些命令,是因为这些命令实际上是一些实现好了的函数,如下图所示:

红框中的两个链接就是,这些命令的地址
https://raw.githubusercontent.com/AloneMonkey/MDCycript/master/MS.cy
https://raw.githubusercontent.com/AloneMonkey/MDCycript/master/md.cy
除此之外我们也可以自定义cy文件来使用。



编译运行项目,在项目运行之后链接cycript,执行下面的命令:

然后就可以使用这个自定义cy文件中的函数了,如下所示:



















