instrument linker 的使用

作为一名iOS开发攻城狮,在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原因,还是会出现内存泄露的问题.内存泄露是一个很严重的问题.下面就简单介绍下怎么使用Xcode7自带的Instruments中的Leaks检测我们的程序有没有内存泄露和定位内存泄露的代码.(分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的)

第一步:打开Xcode7自带的Instruments

或者:

按上面操作,build成功后跳出Instruments工具,选择Leaks选项

选择之后界面如下图:

到这里之后,我们前期的准备工作做完啦,下面开始正式的测试!

1.选中Xcode先把程序(command + R)运行起来

2.再选中Xcode,按快捷键(command + control + i)运行起来,此时Leaks已经跑起来了

3.由于Leaks是动态监测,所以我们需要手动操作APP,一边操作,一边观察Leaks的变化,当出现红色叉时,就监测到了内存泄露,点击右上角的第二个,进行暂停检测(也可继续检测,当多个时暂停,一次处理了多个).如图所示:

4.下面就是定位修改了,此时选中有红色柱子的Leaks,下面有个"田"字方格,点开,选中Call Tree

显示如下图界面

5.下面就是最关键的一步,在这个界面的右下角有若干选框,选中Invert Call Tree 和Hide System Libraries,(红圈范围内)显示如下:

到这里就算基本完成啦,这里显示的就是内存泄露代码部分,那么现在还差一步:定位!

6.选中显示的若干条中的一条,双击,会自动跳到内存泄露代码处,如图所示

7.找到了内存泄露的地方,那么我们就可以修改即可

时间: 2024-10-07 20:00:53

instrument linker 的使用的相关文章

OpenCV4Android:non-system libraries in linker flags: -lopencv_java错误的解决

最近搞之前的一份老代码,发现OpenCV到2.4.11之后,之前的mk文件不适用了,报一堆一堆的错误. 一是如前文所述,LOCAL_LDLIBS    += -lm -llog这一句+=绝不能错误的写成:=.另外,还会报这样一个错误: Android NDK: WARNING: APP_PLATFORM android-17 is larger than android:minSdkVersion 16 in ./AndroidManifest.xml Android NDK: WARNING:

java.lang.Instrument 代理Agent使用

java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码.这通常是在类的main方法调用之前进行预处理的操作,通过java指定该类的代理类来实现. (1) 代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,执行agent的代码. agent的代码与你的main方法在同一个JVM中运行,并被同一个system classloader装载,被同一的安全策略 (security poli

高通sensor库和Linker的死锁问题分析报告

[问题描述] 调试NativeHeap泄露时,我们会用到Android Native Heap调试框架. 在push libc_malloc_debug_leak.so后重启zygote(adb shell stop + adb shell start),会发现系统一直起不来. 用debuggerd打印system_server的调用栈,可以发现system server的大部分线程都在malloc函数里卡死: pid: 4918, tid: 4929, name: Binder_1 >>&g

出现( linker command failed with exit code 1)错误总结(http://blog.csdn.net/hengshujiyi/article/details/21182813)

这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. [html] view plaincopy Undefined symbols for architecture armv7: "_OBJC_CLASS_$_MyPageLogViewController", referenced from: objc-class-ref in Baid

常见错误:Apple Mach-O Linker Error

常见错误描述: Apple Mach-O Linker Error这类错误的错误信息最后一行通常如下: Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang failed with exit code 1 发生这种错误的原因通常是因为项目中存在同名类造成链接错误. 有可能是你存在两个类名称都一样,也可能是因为你在不同的.m文件中定义了同样的const变量. 这类错误需要自己看错误信息中给出的大长串路径,从中找

Instrument 实用详解

苹果:Instruments User Guide iPhone Memory Debugging with NSZombie and Instruments 苹果:Mac OS X Debugging Magic--高级瓶盖调试技巧必备 Instrument 实用详解,布布扣,bubuko.com

iOS之出现( linker command failed with exit code 1)错误总结

补充:我出现这个错误是一个工程中有两个同名的文件,只要删除掉一个就好了,可能是从文件夹中倒文件是出现了重复导入的错误. 这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. Undefined symbols for architecture armv7: "_OBJC_CLASS_$_MyPageLogViewController", r

linker command failed with exit code 1

这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. [html] view plaincopy Undefined symbols for architecture armv7: "_OBJC_CLASS_$_MyPageLogViewController", referenced from: objc-class-ref in Baid

linker command failed with exit code 1 (use -v to see invocation),经典Xcode编译错误的出现和解决!

linker command failed with exit code 1 (use -v to see invocation)这个肯定是个xcode编译运行的时候经典的报错了. 这个问题曾经在我的项目编译和运行的时候多次出现,但是从来没有记录过.现在就想每次出现对它进行一下记录,这样为以后出现同样的问题的时候让自己也有个更加快速的方法找到解决之路. linker command failed with exit code 1 (use -v to see invocation)有很多种情况,