Chisel-LLDB命令插件,让调试更Easy
http://blog.cnbluebox.com/blog/2015/03/05/chisel/
LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。(这里有一个关于调试器如何工作的总体的解释。)
相信每个人或多或少都在用LLDB来调试,比如po
一个对象。LLDB的是非常强大的,且有内建的,完整的
Python 支持。今天我们主要介绍一个 facebook 开源的 lldb 插件 Chisel。可以让你的调试更Easy.
1.安装Chisel
源码地址: Chisel
Chisel 使用 homebrew 来安装,如果你没有安装homebrew, 参考 homebrew。
1 |
|
安装完成按照安装日志上的提示,在~/.lldbinit
文件中添加一行,没有则新建。
提示类似如下:
1 |
|
做好上面的步骤,然后重启Xcode就可以尝试下了。
2.内置命令
Chisel 为lldb提供了新增的便捷命令,是非常实用的命令
2.1 pviews
这个命令可以递归打印所有的view,并能标示层级,相当于 UIView 的私有辅助方法 [view
。 善用使用这个功能会让你在调试定位问题时省去很多麻烦。
recursiveDescription]
使用示例:
1 |
|
2.2 pvc
这个命令也是递归打印层级,但是不是view,而是viewController。利用它我们可以对viewController的结构一目了然。 其实苹果在IOS8也默默的添加了 UIViewController 的一个私有辅助方法[UIViewController
同样的效果。
_printHierarchy]
预览效果:
1 |
|
是不是方便很多呢,而且还可以看到 viewController 是否已经 viewDidLoad .
2.3 visualize
这是个很有意思的功能,它可以让你使用Mac的预览打开一个 UIImage, CGImageRef, UIView, 或 CALayer。 这个功能或许可以帮我们用来截图、用来定位一个view的具体内容。 但是在我试用了一下,发现暂时还是只能在模拟器时使用,真机还不行。
使用简单:
1 |
|
2.4 fv & fvc
fv
和 fvc
这两个命令是用来通过类名搜索当前内存中存在的view和viewController实例的命令,支持正则搜索。
如:
1 |
|
2.5 show & hide
这两个命令用来显示和隐藏一个指定的 UIView . 你甚至不需要Continue Progress. 就可以看到效果。
2.6 mask/umask border/unborder
这两组命令用来标识一个view或layer的位置时用, mask用来在view上覆盖一个半透明的矩形, border可以给view添加边框。但是在我实际使用的过程中mask总是会报错,估计是有bug, 那么mask/unmask 一般不要用好了,用border命令是一样的效果,反正二者的用途都是找到一个对应的view.
2.7 caflush
这个命令会重新渲染,即可以重新绘制界面, 相当于执行了 [CATransaction flush]
方法,要注意如果在动画过程中执行这个命令,就直接渲染出动画结束的效果。
当你想在调试界面颜色、坐标之类的时候,可以直接在控制台修改属性,然后caflush
就可以看到效果啦,是不是要比改代码,然后重新build省事多了呢。
例, 其中 $122 即是目标UIView:
1 |
|
2.8 bmessage
这个命令就是用来打断点用的了,虽然大家断点可能都喜欢在图形界面里面打,但是考虑一种情况:我们想在 [MyViewController
里面打断点,但是 MyViewController并没有实现
viewWillAppear:]viewWillAppear:
方法,
以往的作法可能就是在子类中实现下viewWillAppear:
,然后打断点,然后rebuild。
那么幸好有了 bmessage
命令。我们可以不用这样就可以打这个效果的断点: (lldb)
上面命令会在其父类的
bmessage -[MyViewController viewWillAppear:] viewWillAppear:
方法中打断点,并添加上了条件:[self
isKindOfClass:[MyViewController class]]
3. 自定义命令
我们也可以自定义插件,不过前提是要懂一些 python。 比如设计一个打印keyWindow的windowLevel的命令:
创建python脚本文件 /magical/commands/example.py
:
1 |
|
其中定义了PrintKeyWindowLevel
的类,需要实现 name
description
run
方法来分别告诉名称、描述、和执行实体。
创建好脚本后,然后在前面安装时创建的 ~/.lldbinit
文件中添加一行:
1 |
|
然后重启Xcode之后就可以使用自定义的命令啦。
参考文献:
Chisel-LLDB命令插件,让调试更Easy的更多相关文章
- [转]九个Console命令,让js调试更简单
转自:九个Console命令,让js调试更简单 一.显示信息的命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!DOCTYPE html> <html ...
- IOS调试lldb命令常用,po,
lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面 ...
- IOS调试lldb命令常用po
lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在“(lldb)”提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如 ...
- 【F12】Console命令,让js调试更简单
Console命令,让js调试更简单 一.显示信息的命令 console.log("normal"); // 用于输出普通信息 console.info("informa ...
- Chisel常用命令总结
Chisel简介 Chisel是Facebook开源的一款lldb调试工具,其实就是对系统lldb命令的封装,开发者可以通过简化的命令更方便的进行调试工作.开源地址:https://github.co ...
- Chisel辅助iOS 应用程序调试,MusicApp模仿酷狗4.0 UI框架
本文转载至 http://www.cocoachina.com/ios/20140825/9446.html Chisel Chisel集合了大量的LLDB 命令来辅助iOS 应用程序调试,并支持添 ...
- vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结
vue—你必须知道的 目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...
- 分享几个日常调试方法让js调试更简单
下面分享几个日常调试代码的时候在Console命令行显示你的操作,让你的js调试更简单. console显示信息的命令 在浏览器按f12在console上显示你的文本. <!DOCTYPE ht ...
- 让js调试更简单—console
一.显示信息的命令 console.log 用于输出普通信息 console.info 用于输出提示性信息 console.error用于输出错误信息 console.warn用于输出警示信息 最常用 ...
随机推荐
- 【原创】大叔经验分享(88)jenkins假死
jenkins安装启动后,使用systemctl来进行进程监控 # systemctl enable jenkins 但是还是经常发生jenkins进程挂了,不会自动重启,通过systemctl查看状 ...
- html5+css3 快速学习
http://kuai.qietu.com/books/html5_preview/index.htm#slide1
- document对象详解
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
- charles 的安装和手机配置 (我用的win7系统 ,和 iphone8 的配置)
2018/12/17 由于想抓一下某个手机上app的数据,然后就装了charles,纯记录一下,便于以后不用再查资料.个人参考的网址:https://blog.csdn.net/weixin_4233 ...
- springboot2.0介绍1
SpringBoot 一. Spring介绍 1.1.SpringBoot简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得 ...
- 开发六年mybatisplus使用小结
最近在项目里用到了一个第三方库,叫mybatisplus,是一个mybatis的增强库,简单来说就是增强了mybatis的功能,让mybatis更好用,mybatisplus给的官方定义是Mybati ...
- Linux系统管理——用户、组
单用户OS和多用户OS? Linux是多用户OS,Windows是单用户OS.很多人会疑惑? Windows7也可以创建多个用户啊,怎么能说是单用户OS呢? 这里的多用户指的是OS同时可以被多个人访问 ...
- 通用mapper接口已经写好的 根据 list 集合查询 相应数据
package tk.mybatis.mapper.additional.idlist; import org.apache.ibatis.annotations.Param; import org. ...
- LeetCode--字符串
1.给定字符串s,分区s使得分区的每个子字符串都是回文. 返回s的所有可能的回文分区.例如,给定s =“aab”,返回 [ ["aa","b"], [" ...
- (12)流程控制if
流程: 代码执行的过程 流程控制:对代码执行过程的管控 分支结构: (1) 单项分支 (2) 双项分支 (3) 多项分支 (4) 巢状分支 如果条件表达式为真 ,则执行代码块里面的内容从上到下 (1) ...