安装 Chisel
- home-brew
- brew.sh
- brew -v
- brew list
- brew update
- brew install chisel
配置Chisel
进入 ~/.lldbinit
添加一行
command script import /usr/local/opt/chisel/libexec/fblldb.py
配置LLDB
进入~/.lldb
添加一行
command script #import /opt/LLDB/lldb_commands/dslldb.py
Chisel使用
- po [self.view recursiveDescription] 打印self.view视图的层次结构
- pviews 打印所有的views
- command source ~/.lldbinit 加载lldbinit的资源
- pvc 打印所有控制器
- pactions 地址
- presponder 地址 //打印响应链
- pclass 地址 ///查看类
- pmethods 地址 //查看方法
- pinternals 地址 //查看属性
- fvc -v 地址
- fv 视图名称
- taplog 下次触发断点会打印断点位置的log
- flicker 地址 //该地址的控件UI会闪烁
- vs 地址:
- w s a d p //会标红vs状态下控件的 父控件 子控件视图中的第一个控件 a同级视图中下个控件 d同级控件中上一个控件
- q 退出ws状态
LLDB插件
安装配置
按照git上的install即可,如下链接:
git下载链接
使用:
- search UIView
- fv 视图view
- 如,search wcredEnvelopesreceivehomeView 可以得到此处的地址
- methods 地址, //可以查看该对象的方法
- b -a 上面对象中某个想设置断点的方法的地址
- 触发断点后,bt查看函数点用栈
- sbt 可查看恢复一部分符号的调用栈
cycript
- cycript介绍:
Cycript是由Cydia创始人Saurik推出的一款脚本语言,Cycript混合了OC、JavaScript语法的解释器,这意味着我们能够在一个命令中使用Oc或者JavaScript,甚至两者并用。它能够挂钩正在运行的进程,能够在运行时修改很多东西。 - 安装配置
官网下载SDK,下载后使用Cycript这个可执行文件,为了方便,我们可以放在 /opt/cycript_0.9.594 (opt目录有可选的意思),查看.zshrc文件,cat ~/.zshrc 中放有bash_profile,我们在.zshrc文件中配置。
vi ~/.zshrc
- cycript常用命令
进入Cycript环境:
使用MonkeyDev新建MonkeyApp工程,运行需要动态调试的App,Monkey默认开启了Cycript服务:
CYListenServer(6666);
CHConstructor{
NSLog(INSERT_SUCCESS_WELCOME);
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
#ifndef __OPTIMIZE__
CYListenServer(6666);
MDCycriptManager* manager = [MDCycriptManager sharedInstance];
[manager loadCycript:NO];
NSError* error;
NSString* result = [manager evaluateCycript:@"UIApp" error:&error];
NSLog(@"result: %@", result);
if(error.code != 0){
NSLog(@"error: %@", error.localizedDescription);
}
#endif
}];
}
Cycript
附加进程:
Cycript –r ip:port
退出Cycript环境:
Ctrl + D
Cycript调试命令
>UIWindow.keyWindow() 获取keyWindow
UIApp 获取APPlication单例对象
recursiveDescription() 循环打印子视图
toString() 格式化打印(遇到\n换行)
#对象地址。拿到该对象,可用于调用方法
*对象地址。可以取出对象的成员变量
Choose(类名) 查询当前进程中该类型的对象。
UIApp.keyWindow.recursiveDescription().toString()
快速登录:
在如图所示目录中vi cylogin.sh,
cycript -r 手机地址+端口号
cycript -r 192.168.32.113:6666
这里是:192.168.32.113
使用如下所示命令直接登录快捷登录:
-
Cycript高级用法
Cy文件
Cycript是一门脚本语言,它可以加载封装好的.cy文件。
我们会将常见的Cycript常用功能封装到.cy文件中,便于调试。
非越狱中导入.cy文件
利用MonkeyDev工具导入.cy文件
MonkeyDev本身集成了Cycript。我们只需要将.cy文件通过xcode导入Framworks目录即可。新建cy文件:
command + n 新建一个empty文件,
在新建文件中,输入一个如下所示的函数,
如下,加载到target项目,目录下,此处不需勾选
command+r重新运行项目,如下,在cycript中使用之前需要使用@import导入一下文件,