美文网首页ios-需要掌握的知识点
iOS 检查内存泄漏的debug工具

iOS 检查内存泄漏的debug工具

作者: A_rcher34 | 来源:发表于2020-09-14 18:19 被阅读0次

Zombie

zombie的原理是用生成僵尸对象来替换dealloc的实现,当对象引用计数为0的时候,将需要dealloc的对象转化为僵尸对象。如果之后再给这个僵尸对象发消息,则抛出异常,并打印出相应的信息,调试者可以很轻松的找到异常发生位置。

AddressSanitizer

AddressSanitizer的原理是当程序创建变量分配一段内存时,将此内存后面的一段内存也冻结住,标识为中毒内存。
当程序访问到中毒内存时(越界访问),就会抛出异常,并打印出相应log信息。调试者可以根据中断位置和的log信息,识别bug。如果变量释放了,变量所占的内存也会标识为中毒内存,这时候访问这段内存同样会抛出异常(访问已经释放的对象)。

AddressSanitizer 优缺点
优点:
AddressSanitizer比Zombie拥有更强大的捕获能力,特别是在malloc对象和内存越界方面,zombie几乎无能为力。如果在debug的时候无法捕获异常,上线之后crash log中概率性的EXC_BAD_ACCESS简直是一种灾难。
缺点:
1.AddressSanitizer可能会没有log,不过会在访问中毒内存的代码处断住,这倒是对debug影响不大。
2.使用AddressSanitizer除了分配对象的内存之外,还需要额外的内存,这会导致App内存大量增加,用起来有可能会比较卡。

总的来说,AddressSanitizer优点大于缺点。

使用

在Xcode上方选择设备的地方,点击工程名字,选择Edit Scheme。在Diagnostics中选中enable address sanitizer即可。
AddressSanitizer开启之后,在debug过程中,如果遇到EXC_BAD_ACCESS的问题,Xcode会自动中断,抛出异常

其他compiler flags

实际AddressSanitizer很早以前就有了,只是没在Xcode中集成而已。除了AddressSanitizer还有很多其他的compiler flags,undefined-trap就是其中的一种。undefined-trap的功能也非常强大,它可以检测出程序中的不明确行为,如数据溢出等。

下面我们以undefined-trap举例,看看怎么用其他的compiler flags:

在Build Settings中的Custom Compiler Flags下为other C Flags添加-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error

完成undefined-trap的设置之后,当程序的数据发生溢出行为时,系统就会抛出异常。

结束语:
经过ARC的洗礼之后,普通的访问释放对象产生的EXC_BAD_ACCESS已经大量减少了,现在出现的EXC_BAD_ACCESS有很大一部分来自malloc的对象或者越界访问。简单的敌人已经被干掉,剩下的都是难缠的对手了。还好Apple给我们升级了装备,以后遇到EXC_BAD_ACCESS应该不用那么心惊胆战了吧?

参考文献:
https://blog.csdn.net/xbenlang/article/details/49490563

相关文章

  • iOS 检查内存泄漏的debug工具

    Zombie zombie的原理是用生成僵尸对象来替换dealloc的实现,当对象引用计数为0的时候,将需要dea...

  • Learn C the Hard Way Ex4:Using a

    c语言代码检查工具:splintLinux 内存泄漏检查工具:Valgrindmac 内存泄漏检查工具:Addre...

  • leakcanery2源码

    LeakCanary是Android上用于检查内存泄漏的工具,LeakCanary大大减少因内存泄漏导致的内存溢出...

  • iOS 内存泄漏排查方法及原因分析

    本文将从以下两个层面解决iOS内存泄漏问题: 内存泄漏排查方法(工具) 内存泄漏原因分析(解决方案) 在正式开始前...

  • Debug Memory Graph检查内存泄漏

    讲到检查内存泄漏,很多人的第一反应就是 Instruments 里的 Leaks。今天来讲一下Xcode 8 推出...

  • instruments - leaks

    iOS开发中,难免会出现内存泄漏的情况,此处通过instruments 中的 leaks工具来检测程序的内存泄漏问...

  • iOS 内存泄漏三两事

    iOS 内存泄漏三两事 iOS 内存泄漏三两事

  • instrument 介绍

    一、instrument 工具介绍 Leaks(泄漏):一般的查看内存使用情况,检查泄漏的内存,并提供了所有活动的...

  • iOS 内存泄漏排查方法及原因分析

    级别: ★★☆☆☆标签:「iOS」「内存泄漏排查」「Leaks工具」作者: MrLiuQ审校: QiShare团队...

  • MLeaksFinder关闭

    项目中用cocopods引入了MLeaksFinder进行内存泄漏的检查,但是打debug包的时候有时候不想去开启...

网友评论

    本文标题:iOS 检查内存泄漏的debug工具

    本文链接:https://www.haomeiwen.com/subject/yelfdktx.html