谈谈JSDebugger

栏目: IOS · 发布时间: 6年前

内容简介:JSDebugger开源地址:这是一篇谈谈设计读过我之前博客的朋友可能会记得我3-4月份的时候写过一篇

务虚乱弹

JSDebugger开源地址: https://github.com/SatanWoo/JSDebugger

这是一篇谈谈设计 JSDebugger 的总体设想,不会过于深究具体实现细节,后续会单独探讨一些涉及实现方面的过程。

读过我之前博客的朋友可能会记得我3-4月份的时候写过一篇 动手制作一个简易的iOS动态执行器 ,效果如下:

谈谈JSDebugger

虽然这个效果还起来还不错(有许多人问这个东西咋实现的,挺炫酷的),但是其实只是个原型而已,从设想构思到编码实现没有超过一天的时间。当时在博文里面承诺发代码,想想实现的完善度还不够,就准备完善后再继续搞搞。不过后来由于我转到其他组不继续钻研 iOS ,这事也就不了了之。

那为什么现在又重新开搞呢? ,三点原因吧:

  1. 有朋友在群里问我之前提过的 Mach-o 包瘦身方案怎么也没发文章?
  2. 看到同事查非Crash产生的Bug的过程还是比较累。
  3. 萧杨玉 太强了。

好,来说说前两个原因:

  • 第一点,有些文章为什么后续不发,主要原因还是很多产出和收获都是工作中和同事一起探讨研究出来的,发出来一是泄漏了公司的数据(职业操守还是很重要的),二是相当于霸占了一些别人的工作成果。比如说我之前写的内存等等,对外发的一般都是只和开源代码相关的同时删减了大部分略微关键的部分,所以导致有些读者读起来断断续续云里雾里。

完整版的很多文章或者一些没对外的技术研究,我都发在了公司的内网里,欢迎加入阿里巴巴。

  • 第二点,我之前有段时间负责手淘的稳定性,除了有堆栈的Crash问题外,更多是用户反馈的使用异常以及毫无头绪的奇怪现象。针对这种问题,我相信各家(甚至开源方案)一般都有自己的监控体系,比如日志啊、埋点等等。但是怎么说呢,从我的感受来看,都是使用起来偏繁琐,而且 还依赖对应的开发把错误信息等现场保留写入到日志内。 我想要的就是一个能像我在自己手机上调试应用一样调试用户手机的能力(前提是用户授权同意),因此我就想做了一个这样的工具。结合自己以前玩逆向的些许经历, Cycript 就提供了类似的能力,因此就想做一个类似的。

说了这么多原因,其实都是给萧杨玉太强了这个原因打掩护的,主要原因就是萧杨玉太强了,写这个JSDebugger是为了向他致敬学习。

JSDebugger

言归正传,回到 JSDebugger 本身,基于之前的代码,这次主要做了完整性的代码重构重写以及功能完善上。

  • 类方法调用
  • 实例方法调用
  • Setter & Getter的调用
  • 可变参数的函数调用
  • C Pointer的使用
  • 基础类型的使用
  • 对象和类的使用
  • 结构体的使用(目前支持 CGSize , CGRect , CGPoint ,正在开发自定义注册接口)
  • 插件化的扩展功能。

同时,为了更好的测试所写的 JavaScript 代码,开发了玩具级别的 Playground 功能,每次实时修改文件后保存即可自动触发 Reload

很多细节此文不表,但是有些功能上的实现还是比较用心的,比如支持了各种类型、个数的可变参数的函数调用,比如目前支持了 chooseintrospect 的能力,二者配合可以对任意对象实时查询其当前所有的属性值。

而且,我对 JavaScriptCore 的使用可能和常规大家所属性的 iOS JavaScriptCore 有所区别,利用更低层的设计思路,经过我实测:

更低层的设计桥接思路在 iOS 上同比基于 Objective-C 的使用方式可以节省 50% 的时间;同比在 Android 上使用开源的 JavaScriptCore50分之一左右 的时间。

当然Android上比较主流的JS引擎室v8咯

具体快原因可以阅读 动手制作一个简易的iOS动态执行器 中涉及的 JavaScriptCore 上层源码分析以及阅读我的 JSDebugger 源码。

目前 JSDebugger 还在不断完善中,后续会把我更多的想法移植到里面,总体规划有几个关键点:

  • 实现一个交互式的编辑器(或者命令行),能够让大家写 Objective-C 的代码自动转换成 JSDebugger 的JS语法。以我目前的技术水准,还做不到 Cycript 那种牛逼的 Objective-CJavaScript 的混合语法模式。

  • 实现远程图形化 Debug 能力。目前 JSDebugger 可以调试数据,但是如果能像 Reveal 一样把操作界面和数据结合起来就会更有效的定位问题。

欢迎有想法的朋友一起来参与完善这个项目,开源地址如下:

https://github.com/SatanWoo/JSDebugger

https://github.com/SatanWoo/JSDebugger

https://github.com/SatanWoo/JSDebugger

当然,要是发现了任何的Bug或者使用上的疑惑、抑或是可以改进的点,也可以私聊我或者开 issue

最后

实现 JSDebugger 的过程,还是站在两个杰出的项目肩膀上:

  • Cycript
  • JSPatch

我的思路是来自于 Cycript ,诸如结构体等许多方面的实现细节是参考了 JSPatch 。在这里对这几个项目的作者和代码贡献者表示感谢!

此外,很多的技术方案是和 HookZZ 大神交流(主要是他教我)中学习而来,在这也特别感谢。也感谢头条的谢大佬的代码贡献以及寒神的 Code Style 整理。

当然, JSDebugger 在实现上还是有很多自己思考的部分,感兴趣的读者可以自行前往 JSDebugger的Github开源地址


以上所述就是小编给大家介绍的《谈谈JSDebugger》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

React

React

卓越开发者联盟 / 寸志、范洪春、杨森、陈涌 / 电子工业出版社 / 2015-5-1 / CNY 65.00

2014 年横空出世的由Facebook 推出的开源框架React.js,基于Virtual DOM 重新定义了用户界面的开发方式,彻底革新了大家对前端框架的认识,将PHP 风格的开发方式迁移到客户端应用开发。其优势在于可以与各种类库、框架搭配使用。《React:引领未来的用户界面开发框架》是这一领域的首作,由多位一线专家精心撰写,采用一个全程实例全面介绍和剖析了ReactReact.js 的方方......一起来看看 《React》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具