iOS调试之chisel
Chisel 是一个 LLDB 指令集合,用户辅助 iOS 应用差错。
安装
1.chisel的安装需要使用Homebrew,如果还没有安装Homebrew,可以使用下面的命令安装,如果你已经安装了,可以跳过这一步
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
2.用Homebrew安装chisel:
brew update
brew install chisel
![](https://img.haomeiwen.com/i6203393/dece0876710444fe.png)
3.在根目录下中添加命令
touch ~/.lldbinit
echo "command script import /usr/local/opt/chisel/libexec/fblldb.py" >> ~/.lldbinit
重启一下Xcode,安装完成。
更新
如果你想更新chisel,只需要输入更新的命令即可。
brew upgrade chisel
错误解决
1.安装homebrew时出现错误的话,可以看我另外一篇文章
2.出现Error: Checksum mismatch.
解决方案:rm -rf /Users/hanhan/Library/Caches/Homebrew/portable-ruby-2.6.3.mavericks.bottle.tar.gz(替换为自己的错误目录)
3.执行brew install chisel时很慢时
// 执行下面这句命令,更换为中科院的镜像:
git clone git://mirrors.ustc.edu.cn/homebrew-core.git/ /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core --depth=1
// 把homebrew-core的镜像地址也设为中科院的国内镜像
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
// 更新
brew update
内置命令
1 pviews
这个命令可以打印一个view的层级,如:
(lldb) pviews self.window
|<UIWindow: 0x7fd5b6816780; frame = (0 0; 375 667);
gestureRecognizers = <NSArray: 0x7fd5b6817770>;
layer = <UIWindowLayer: 0x7fd5b68263f0>>
| <UILayoutContainerView: 0x7fd5b6941780;
frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x7fd5b694fc10>; layer = <CALayer: 0x7fd5b6931250>>
| <UINavigationTransitionView: 0x7fd5b6949620; frame = (0 0; 375 667); clipsToBounds = YES;
autoresize = W+H;
layer = <CALayer: 0x7fd5b6946e20>>
2 pvc
pvc可以打印一个viewcontroller的层级,而不是view 如:
(lldb) pvc self.mMDrawerController**
<MMDrawerController: 0x7fd5b658b8c0;
view = <UIView; 0x7fd5b658cd00>; frame = (0, 0; 375, 667)>
| <SampleAlbumListVC: 0x7fd5b658bc90;
view = <UIView; 0x7fd5b66be7a0>; frame = (0, 0; 375, 667)>
| <SlideMenuVC: 0x7fd5b6589b50;
view = <UIView; 0x7fd5b684f790>; frame = (inf, inf; 0, 0)>
3 visualize
visualize这个命令比较强大,它可以使用预览App打开UImageView CGImageRef UIView CALayer 如:
visualize uiimageview
4 fv & fvc
这两个命令是用来通过类名搜索当前内存中存在的view和viewController实例的命令,支持正则搜索。
(lldb) fvc mm
0x7fd5b658b8c0 MMDrawerController
(lldb)fv cate
0x7fd5b6e06920 AlbumCategoryView
0x7fd5b6d63f80 AlbumCategoryView
0x7fd5b6d66e60 AlbumCategoryView
0x7fd5b6d69d40 AlbumCategoryView
0x7fd5b6d6cc20 AlbumCategoryView
0x7fd5b6e0a150 AlbumCategoryView
5 show & hide
这两个命令用来显示和隐藏一个指定的 UIView
(lldb) show self.view
(lldb) hide self.view
也可以使用内存地址隐藏和现实view,比如通过 fv cate找到一个view后使用hide隐藏它
(lldb)fv cate
0x7fd5b6e06920 AlbumCategoryView
(lldb) hide 0x7fd5b6e069206.caflush
刷新UI,当调试时候,我们改变了UI的布局的时候,不用重新启动,使用caflush刷新UI即可,作为快捷键使用比较好。
7.taplog
点击屏幕,程序会暂停,会打印到你所触摸的view。
8.pclass
打印出对象的class以及是从哪儿继承过来的
9.pinternals
打印出对象内部的东西,有空可以看看系统的一些对象内部都有哪些东西
常用的就这些命令,当然你也可以自定义Chisel命令,但是需要你了解点python
网友评论