教你如何使用Chisel增强LLDB调试

作者: sprint | 来源:发表于2015-10-22 10:44 被阅读2061次

    如果你想快速高效调试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,由于我不懂 所以就略过了.....

    相关文章

      网友评论

      • wlerl:博主,我想问下,我安装了后,只能pview + 地址(类似 0x7sjdhjshds)的这种,无法pview self.windows这种,这样如果一个工程大了,就很难定位到对应的变量,请问应该怎么设置呢?
        7a946bf5d2ca:我也遇到了
        sprint:@wlerl 按道理来说 不需要额外配置的 暂时没有遇到这个问题 你解决了吗?

      本文标题:教你如何使用Chisel增强LLDB调试

      本文链接:https://www.haomeiwen.com/subject/ychthttx.html