教你如何使用Chisel增强LLDB调试
2015-10-22 本文已影响2061人
sprint
如果你想快速高效调试IOS程序不妨学习下LLDB插件-Chisel,如果你使用过po,p等调试命令,是否觉得它们还是太弱,想知道一个view的层级还要使用code去打印(虽然我也这样干过),简直不能忍受,下面就让Chisel来解救你吧。
1.Chisel的安装
Github地址:https://github.com/facebook/chisel
Chisel的安装非常简单,你只要安装了homebrew环境,一切都是那么自然轻松。
1. brew update
2. brew install chisel
安装完成后最后出现一个安装目录,类似
command script import /usr/local/opt/chisel/libexec/fblldb.py
这时候你只需要~/.lldbinit文件中添加
==> Caveats
Add the following line to ~/.lldbinit to load chisel when Xcode launches:
command script import /usr/local/opt/chisel/libexec/fblldb.py
记得把上面的script替换为你的
如果 ~/.lldbinit 不存在 使用以下命令添加一个即可
touch ~/.lldbinit
然后重启Xcode
2.内置命令
2.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.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)>
2.3 visualize
visualize这个命令比较强大,它可以使用预览App打开UImageView CGImageRef UIView CALayer 如:
visualize uiimageview
2.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
2.5 show & hide
这两个命令用来显示和隐藏一个指定的 UIView
(lldb) show self.view
(lldb) hide self.view
也可以使用内存地址隐藏和现实view,比如通过 fv cate找到一个view后使用hide隐藏它
(lldb)fv cate
0x7fd5b6e06920 AlbumCategoryView
(lldb) hide 0x7fd5b6e06920
常用的就这些命令,当然你也可以自定义Chisel命令,但是需要你了解点python,由于我不懂 所以就略过了.....