当前位置:   article > 正文

iOS调试神器--FLEX_ios flex查看内存原理

ios flex查看内存原理

FLEX (Flipboard Explorer) 是一系列集成在APP内部的用于iOS调试的工具集,以工具栏的形式显示在应用中,通过它,可以查看并修改几乎所有的APP运行状态。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3gyNkjz-1598274646340)(https://user-images.githubusercontent.com/8371943/70185687-e842c800-16af-11ea-8ef9-9e071380a462.gif)]

强大的调试能力

  • 查看、修改View的层次关系。
  • 查看对象的属性和实例变量。
  • 动态修改属性和实例变量。
  • 动态调用实例和类方法。
  • 观察详细的网络请求历史记录,包括时间、报头和完整响应。
  • 添加自定义的模拟器快捷键。
  • 查看系统日志消息(例如从NSLog)。
  • 动态访问堆上的对象。
  • 访问APP沙盒中的文件系统。
  • 浏览文件系统中的SQLite/Realm数据库。
  • 在模拟器中使用控制键、shift键和command键触发3D触摸。
  • 探索APP和链接系统框架中的所有类(公共和私有)。
  • 快速访问一些常用的对象,比如 [UIApplication sharedApplication] 、App Delegate、Root View Controller等。
  • 动态查看、修改 NSUserDefaults 存储的值。

和其它调试工具不同,FLEX完全运行在你的APP中,所以不需要连接到LLDB/Xcode或者远程调试的服务端,在模拟器和真机上都运行的很好。

用法

简单方法

// Objective-C
[[FLEXManager sharedManager] showExplorer];
  • 1
  • 2
// Swift
FLEXManager.shared.showExplorer()
  • 1
  • 2

完整方法

#if DEBUG
#import "FLEXManager.h"
#endif

...

- (void)handleSixFingerQuadrupleTap:(UITapGestureRecognizer *)tapRecognizer
{
#if DEBUG
    if (tapRecognizer.state == UIGestureRecognizerStateRecognized) {
        // This could also live in a handler for a keyboard shortcut, debug menu item, etc.
        [[FLEXManager sharedManager] showExplorer];
    }
#endif
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

功能示例

修改视图

点击 views ,从工具栏下面弹出界面,显示视图的详细信息,并能修改属性值和调用方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IcKW07h6-1598274646347)(https://user-images.githubusercontent.com/8371943/70271816-c5c2b480-176c-11ea-8bf4-2c5a755bc392.gif)]

网络记录

启用后,网络调试允许你查看所有使用NSURLConnection或NSURLSession发出的请求。并且你可以调整要缓存的响应体的类型以及响应缓存的最大大小限制。你可以选择在应用程序启动时自动启用网络调试。此设置会在启动时持久化。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3rdtzXtk-1598274646349)(https://user-images.githubusercontent.com/8371943/70271876-e5f27380-176c-11ea-98ef-24170205b706.gif)]

查看堆栈上的对象

FLEX会查询所有malloc活动分配的内存块,并搜索那些看起来像对象的内存块。你可以从这里看到一切:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jz37esC3-1598274646351)(https://user-images.githubusercontent.com/8371943/70271850-d83cee00-176c-11ea-9750-ee3a479c6769.gif)]

通过地址访问

你可以通过任意的一个地址来访问该地址的对象,如果地址指向有效的对象,你可以直接打开它。如果FLEX不确定这个地址是否指向有效的对象,它会警告并拒绝访问该指针。但是,你仍可以通过"Unsafe Explore"来访问它。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xmh9BbM5-1598274646353)(https://user-images.githubusercontent.com/8371943/70271798-bb081f80-176c-11ea-806d-9d74ac293641.gif)]

模拟键盘快捷键

默认的键盘快捷键允许您激活FLEX工具,使用方向键滚动,以及使用 ESC 键关闭模式。你也可以添加自定义键盘快捷方式通过 -[FLEXManager registerSimulatorShortcutWithKey:modifiers:action:description] 这个方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drsvho5n-1598274646355)(https://user-images.githubusercontent.com/8371943/70272984-d3793980-176e-11ea-89a2-66d187d71b4c.png)]

文件浏览

查看APP沙盒内的文件系统,包括文件大小、图片预览、以友好的方式显示json和plist文件。你可以重命名和删除文件和文件夹,也可以将文本和图片文件拷贝和剪贴板中,并且通过 “share” 来共享任意文件,以方便你在其他应用来打开这些文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbkmhSok-1598274646356)(https://user-images.githubusercontent.com/8371943/70271831-d115e000-176c-11ea-8078-ada291f980f3.gif)]

SQLite浏览器

SQLite数据库文件(以 .db 或者 .sqlite为后缀为结尾的文件 ),或者
Realm数据库文件都可以使用FLEX来浏览。数据库浏览器允许你查看所有表,并通过点击每列的表头进行排序。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-azOY5JoG-1598274646357)(https://user-images.githubusercontent.com/8371943/70271881-ea1e9100-176c-11ea-9a42-01618311c869.gif)]

在模拟器中模拟3D触摸

使用 CMD、CTRL 和 shift 键的组合,您可以在模拟器中模拟不同级别的3D触摸压力。每个键贡献最大力的1/3。注意,你需要稍微移动触摸来获得压力更新。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-149bL55w-1598274646358)(https://cloud.githubusercontent.com/assets/1422245/11786615/5d4ef96c-a23c-11e5-975e-67275341e439.gif)]

探索系统库资源

深挖框架所有公共的和私有的类。如果需要了解有关类的更多信息,可以创建类的实例并研究其默认状态。如果知道要查找的类是哪个类,还可以输入类名直接跳转到该类。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nvg04jtc-1598274646359)(https://user-images.githubusercontent.com/8371943/70271868-dffc9280-176c-11ea-8704-a0c05b75cc5f.gif)]

编辑NSUserDefaults

FLEX允许修改NSUserDefaults的strings, numbers, arrays, and dictionaries,及其它们的组合,输入格式为JSON;如果使用其它数据作为key,如NSDate,则是只读的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CUi8y85F-1598274646360)(https://user-images.githubusercontent.com/8371943/70271889-edb21800-176c-11ea-92b4-71e07d2b6ce7.gif)]

探索其它APP

代码注入留给大家去摸索了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/509963
推荐阅读
相关标签