chisel
facebook封装的一个lldb指令库
pviews
打印当前界面图层结构
pvc
打印当前界面控制器结构
pactions <地址>
打印某个按钮地址的事件
presponder <地址>
打印响应者链条
pclass <地址>
打印类的继承关系
pmethods <地址>
打印类的方法列表(类方法和对象方法)
methods <地址>
打印类的方法列表(包括父类)
pinternals <地址>
打印成员属性列表,带 _
fvc -n DJViewController
只知道名字,拿到这个vc的信息
fvc -v <地址>
以地址,查vc
fv DJView
查视图
taplog
设置响应(如点击)断点,当点击按钮或触发手势,会断住,方便调试
flicker <地址>
让地址对应的视图隐藏并显示(相当于闪了一下)
vs <地址>
视图变红,进入动态调试环境,如下图

LLDB
search DJView
通过类名查找视图
sbt
恢复并查看当前调用栈未恢复的符号
Cycript
主要通过修改内存用来调试界面,可以附加到手机应用进程上而不使用Xcode,一般app检测不到cycript,但是可以检测到image list
cycript -r 192.168.1.112:6666
附加cycript环境到当前手机app上,要求电脑和手机同一个网段(局域网),112是手机当前IP,6666是monkeydev默认设置监听的端口。(注意:尽量不要把当前应用切换到后台)
cy# UIWindow.keyWindow()
就可以拿到当前window
cy# var keyWindow = UIWindow.keyWindow()
cy# keyWindow.rootViewController
以上代码就可以通过cycript的环境来定义变量,方便调试
注意:
1. 只要当前进程没有挂,keyWindow就还在
2. 只要页面变了,内存地址就不要再用了
cy# #0x00000102764CDA
通过前面加#号,相当于拿到这个地址的对象或变量,类似于 po
cy# *keyWindow
通过前面加*号,可以拿到这个地址对象的成员变量
cy# keyWindow.recursiveDescription().toString()
打印keyWindow的视图层级,加toString是为了排列好看
cy# choose(UIButton)
把所有UIButton打印出来,类似与LLDB的search
ctrol+d表示退出当前cycript环境
cy# pviews()
cy# pvcs()
cy# pactions(#0x00000102764CDA)
打印视图层级等类似chisel用法,是monkeydev配置plist文件里加载的好用的命令
#自定义cycript
工程目录创建后缀 .cy 文件,项目build phases 里面copy files选项加入此文件到工程包,后面不需要打勾,重新运行项目

然后在终端连接进入cycript环境
cycript -r 192.168.1.112:6666
cy# @import diyCycript
使用@import导入刚创建的.cy文件,即可使用diyCycript文件(看下图)里写的方法

写入的cy文件为了以后维护方便,可以参考Monkeydev的做法,把自己写的cy文件上传到云,拉取使用即可
