文档章节

使用Instruments检测内存泄漏

 王素年
发布于 2017/07/07 17:57
字数 963
阅读 68
收藏 0

instrument能做的事情:
1.Instruments是用于动态调追踪和分析OS X和iOS的代码的性能分析和测试工具;
2.Instruments支持多线程的调试;
3.可以用Instruments去录制和回放,图形用户界面的操作过程
4.可将录制的图形界面操作和Instruments保存为模板,供以后访问使用。
5.追踪代码中的(甚至是那些难以复制的)问题;
6.分析程序的性能;
7.实现程序的自动化测试;
8..部分实现程序的压力测试;
9.执行系统级别的通用问题追踪调试;
10.使你对程序的内部运行过程更加了解。

 

instrument中常用的工具:

Leaks(泄漏):一般的查看内存使用情况,检查泄漏的内存,并提供了所有活动的分配和泄漏模块的类对象分配统计信息以及内存地址历史记录;
Time Profiler(时间探查):执行对系统的CPU上运行的进程低负载时间为基础采样。
Allocations(内存分配):跟踪过程的匿名虚拟内存和堆的对象提供类名和可选保留/释放历史;
Activity Monitor(活动监视器):显示器处理的CPU、内存和网络使用情况统计;
Blank(空模板):创建一个空的模板,可以从Library库中添加其他模板;
Automation(自动化):这个模板执行它模拟用户界面交互为IOS机应用从instrument启动的脚本;
Core Data:监测读取、缓存未命中、保存等操作,能直观显示是否保存次数远超实际需要。
Cocoa Layout:观察约束变化,找出布局代码的问题所在。
Network:跟踪 TCP / IP和 UDP / IP 连接。
Automations:创建和编辑测试脚本来自动化 iOS 应用的用户界面测试。

 

Instruments最常用的三大类(主要介绍下面这三个的操作):
 Leaks:找到引发内存泄漏的起点
 Time Profiler:分析代码的执行时间,找出导致程序变慢的原因。
 Allocations:监测内存使用/分配情况

 

 

使用 Instruments 的 Leaks工具

1.打开

1.首先我们选中Xcode先把模拟器(command + R)运行起来
2.然后我们再选中Xcode,按快捷键(command + control + i)运行起来,

3.然后出现如下界面,选择Leaks


此时Leaks已经跑起来了。

 

或者

 

可以 点击Xcode的“调试导航”(如图一)

 

然后选中“Memory”,再点击右侧的 “Profile in Instruments”,(如图二)

 

会自动打开Instruments。这时候会弹出来一个对话框 。选择“Transfer” 这种方式打开,(如图三)

 

 

或者

 

通过Xcode --> Open Developer Tool -->instruments --leaks 的方式来打开)(如图0)

 

 

 

2.打开后界面如下:

Leaks是动态监测,所以我们需要手动操作APP,进行测试,一边操作APP,一边观察Leaks的变化,

点击红点Record(红色圆圈按钮)运行。
观察,我们可以发现在Leaks里面有一个红色X,这说明了我们的APP存在内存泄露
点击暂停,点击其中一个,然后我们开始分析。(也可继续检测,当多个时暂停,一次处理了多个)


下面就是定位修改了,此时选中有红色叉的Leaks,下面有个"田"字方格,点开,选中Call Tree。
6.下面就是最关键的一步,在这个界面的右下角有若干选框,选中Invert Call Tree 和Hide System Libraries,(红圈范围内)(如果不知道在那个位置请接着往下看)
7.定位
在详情面板选中显示的若干条中的一条,双击,会自动跳到内存泄露代码处,然后点击右上角 Xcode 图标进行修改。

http://www.jianshu.com/p/92cd90e65d4c

http://www.jianshu.com/p/e77d9cb5d0d4

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 70
码字总数 43954
作品 0
普陀
程序员
两分钟让你学会使用instruments leaks检测内存泄漏

虽然苹果给我们提供了ARC(自动内存管理模式)的开发环境,但是在日常开发中也不排除会出现内存泄漏问题 检测内存泄漏有很多方法,本篇文章介绍的是xcode自带工具instruments 嗯,不多说,快速入门...

Aracya
06/06
0
0
Mac -XCode 各种目录路径和调试方法

hosts文件所在目录: /private/etc/ xcode插件目录: ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 模拟器路径: ~/Library/Developer/Xcode/DerivedData 删除多余配置证书......

Nlinger
2017/06/07
0
0
Cocos开发中性能优化工具介绍之Xcode中Instruments工具使用

Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动。启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存、CPU和文件系统。 每个跟踪...

智捷课堂
2014/11/05
0
0
XCode 检测内存泄露:Instruments中的Leaks

如果要检测内存泄露,我们会使用Xcode7自带的Instruments中的Leaks工具来检测. 现在的开发环境是ARC,所以很少会出现内存泄漏的情况. 不过我们一定要养好码代码的规范性. 例如:使用通知,别忘了...

奋斗的青春年华
2016/09/09
82
0
UITextView 内存泄漏

xcode5,在做项目的时候,发现在一个navigationController push到一个页面后,在这个页面有一个UITextview,然后点击这个textview,弹出键盘,随便打几个字,然后点返回,pop回到第一个contr...

板鞋飞人
2014/02/18
160
3

没有更多内容

加载失败,请刷新页面

加载更多

分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
12分钟前
1
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
20分钟前
0
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
30分钟前
15
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
56分钟前
1
0
区块链技术中的那些能商用的企业级应用

WEPOWER是一家立陶宛初创企业,旨在改变可再生电力项目的付费方式。WePower公司创始人Nick Martyniuk表示,政府统一收购价的存在推动了全球风能与太阳能市场的发展。因此,他的公司希望帮助那...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部