JSDebugger 完全指南:用 JavaScript 撬开 iOS 应用运行时的开源调试神器
JSDebugger 完全指南用 JavaScript 撬开 iOS 应用运行时的开源调试神器【免费下载链接】JSDebuggerJavaScript-Based Debugger For Inspecting Running State Of Your Application项目地址: https://gitcode.com/gh_mirrors/js/JSDebuggerJSDebugger 是一款基于 JavaScript 的 iOS 运行时调试工具它让你像写脚本一样轻松检查应用运行状态、调用任意 Objective-C 方法甚至动态修改界面逻辑无需手动声明 JSExport。本指南面向新手带你快速理解 JSDebugger 的工作原理、搭建调试环境并掌握用 JavaScript 撬开 iOS 运行时的大门。 JSDebugger 是什么重新定义 iOS 运行时调试传统 iOS 调试往往需要断点、LLDB 命令或者为每个类手动桥接 JavaScript。JSDebugger 则彻底改变了这一过程——它底层基于 JavaScriptCore 引擎见Source/Core/JDEngine.h让 JavaScript 与 Objective-C 运行时无缝对接。你可以在不重编译、不重启 App 的情况下用一行 JS 代码调用任意 Objective-C 方法、读写属性、甚至操作堆上的对象。简单说JSDebugger JavaScript 语法 Objective-C 运行时全能力对调试、逆向分析、自动化测试都非常实用。 JSDebugger 核心功能一览✅ 调用类方法与实例方法无需 JSExport 桥接✅ 读写实例属性支持自定义 Setter✅ 变长参数Variadic Arguments支持✅ C 指针、结构体Struct操作✅ choose() 搜索堆上指定类的全部实例✅ introspect() 对象内省✅ 关联对象Associated Object✅ Playground 本地文件热更新调试⚙️ JSDebugger 安装方法一分钟集成进项目JSDebugger 通过 CocoaPods 集成非常简单。在项目的Podfile中添加一行pod JSDebugger然后执行pod install并在 AppDelegate 或 ViewController 中启动引擎#import JSDebugger/JSDebugger.h [[JDEngine engine] start];引擎启动逻辑定义在Source/Core/JDEngine.m它会自动注册内置插件并初始化默认结构体支持。想快速体验的话可以直接克隆官方 Demogit clone https://gitcode.com/gh_mirrors/js/JSDebuggerDemo 工程位于JSDebuggerDemo/其中包含了完整的调用示例开箱即用。 JSDebugger 使用方法一行 JS 调用任意 Objective-C 方法JSDebugger 最神奇的地方在于你可以在 JS 中直接使用 Objective-C 的类名和方法。其底层有一套明确的方法名转换规则见Source/Core/Runtime/下的桥接模块冒号:全部转换为下划线_方法各段拼接成单一字符串例如- (void)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)opts在 JSDebugger 中写成application_didFinishLaunchingWithOptions_(app, opts)来看一个真实可运行的例子来自JSDebuggerDemo/demo.js// 创建 UIView 并设置背景色 var view UIView.alloc().init(); view.setBackgroundColor_(UIColor.redColor()); // 调用系统类方法 var array NSArray.arrayWithObjects_(72, 2, 3); // 调用自定义类方法 ViewController.printNSArray_(array);注意JSDebugger 不支持属性 Getter 语法读取属性要用方法调用形式例如view.backgroundColor()是正确的而view.backgroundColor会出错。️ 实战技巧用 JSDebugger 动态修改界面调试 UI 是 JSDebugger 的高频场景。借助choose()插件实现位于Source/Core/Plugin/Plugin/JDChoose.h你可以搜索堆上指定类的全部实例直接修改其状态// 找到当前所有 UILabel 实例 var label choose(UILabel)[0]; // 修改文本Setter 语法与 OC 一致 label.text Hello JSDebugger!; // 读取属性请使用方法调用 var text label.text(); // 链式调用找到 ViewController 并改背景色 var vc choose(ViewController)[0]; vc.view().setBackgroundColor_(UIColor.orangeColor());甚至可以把结构体当作普通 JS 对象来赋值轻松调整 framelabel.frame {origin:{x:0, y:10}, size:{width:200, height:100}}; 进阶玩法内省、指针与关联对象除了基础调用JSDebugger 还支持不少进阶能力内省通过introspect()查看任意对象的类结构Source/Core/Plugin/Plugin/JDIntrospect.hC 指针直接分配和读写 int、double、char 指针关联对象在运行时给对象挂载额外属性全程无需重新编译// 指针操作 var intP vc.allocAddressWithInt(); vc.testIntPointer_(intP); // 关联对象 var aso TestAssociateObject.alloc().init(); vc.associateObject aso; vc.print(); Playground 热更新改完即生效的调试体验JSDebugger 还内置了Playground 热更新机制。通过JDLocalFileObserver见Source/FileWatcher/JDLocalFileObserver.h监听电脑上的.js文件在 ViewController 声明JDLocalFileObserver属性并初始化传入 JS 文件路径启动监听[self.fileWatcher start]之后每次在编辑器中修改并保存Command SApp 内自动重新执行脚本即时生效这让你可以边写边调调试效率大幅提升。不需要时记得调用stop停止监听。⚠️ 使用 JSDebugger 的注意事项目前不支持 Getter 语法请统一使用方法调用读取属性Block 参数暂不支持自定义结构体支持尚不完整变长参数需以 NIL 结尾例如NSArray.arrayWithObjects_(1, 2, 3)建议在 Debug 环境使用避免影响线上性能 总结JSDebugger 用 JavaScript 重新定义了 iOS 运行时调试体验零桥接调用任意 OC 方法、choose 堆对象、Playground 热更新无论是日常开发调试、UI 联调还是逆向分析它都是一把趁手的撬棍。项目处于快速迭代阶段首个稳定版 v0.8核心代码组织清晰Source/Core/下的引擎、FFI、运行时模块都值得深入阅读。现在就克隆 Demo 工程用一行 JavaScript 开始你的 iOS 运行时探索之旅吧【免费下载链接】JSDebuggerJavaScript-Based Debugger For Inspecting Running State Of Your Application项目地址: https://gitcode.com/gh_mirrors/js/JSDebugger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考