美文网首页
野指针检测

野指针检测

作者: AlvinCrash | 来源:发表于2022-04-18 11:22 被阅读0次

什么是野指针

维基百科里给的定义:

当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针便称迷途指针(即通常说的野指针)。

若操作系统将这部分已经释放的内存重新分配给另外一个进程,而原来的程序重新引用现在的迷途指针,则将产生无法预料的后果。

因为此时迷途指针所指向的内存现在包含的已经完全是不同的数据。

野指针分类:

引用腾讯bugly团队的一张图解

背景

目前国际美居APP存在大量零散的野指针闪退

野指针所指向的内容存在很大的不确定,可能是未使用的内存,也可能是已经被覆盖的内存。

同时野指针还有崩溃堆栈延时、随机、不必现等特性造成了crash的难以准确定位以及修复

解决思路

目前xcode提供两种野指针检测的方法:Malloc scribbie 和 Zombie Objects

Malloc scribbie

根据苹果官方文档显示,Malloc scribbie主要在释放内存 dealloc 在内存上填 0x55

当访问到对象内存中填充的是0x55时,程序就会出现异常

Zombie Objects

把释放的对象,全都转为僵尸对象【苹果文档

当僵尸对象再次被访问时,将进入消息转发的流程,开始处理僵尸对象访问,输出日志并发生 Crash

推荐Zombie Objects方式:

鉴于我们项目大部分代码都是OC代码,c\c++比较少

方案预研

主要考虑以下几点

监控策略:

全量监控

自定义对象监控

黑名单

白名单

内存回收策略:

最大僵尸内存空间

内存预警处理

FIFO

僵尸对象处理策略:

crash上报(sit/uat)

error上报(线上,降低crash率)

降级策略:

热修复,关闭僵尸监控

oss配置文件,APP启动读取配置

监控流程

开启检测

dealloc替换

参考文档

iOS-底层原理36:内存优化(一) 野指针探测

iOS Zombie Objects(僵尸对象)原理探索

iOS野指针定位总结

相关文章

  • 野指针检测

    什么是野指针 维基百科里给的定义: 当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指...

  • iOS-底层原理36:内存优化(一) 野指针探测

    本文主要讲解两种野指针检测的原理及实现 技术点:野指针探测 本文的主要目的是理解野指针的形成过程以及如何去检测野指...

  • 如何检测野指针?

    啥是野指针? 指向一个已经删除的对象或未申请访问受限内存区域的指针。而这里的野指针主要是指对象释放后,指针未置空导...

  • 野指针和僵尸对象

    野指针 僵尸对象 无法复活僵尸对象 检测僵尸对象方法 target--->diagnostics--->Zombi...

  • 什么是野指针?什么是僵尸对象?

    野指针与僵尸对象 1. 野指针 1>C语言中的野指针:一个指针变量指向一块随机的空间,这个指针就是野指针当我们声明...

  • 空指针和野指针

    1、什么是空指针,什么是野指针 2、野指针的危害

  • iOS监控-野指针定位

    iOS监控-野指针定位 iOS监控-野指针定位

  • 野指针空指针万能指针

    野指针空指针万能指针

  • 野指针危害真的很大吗?

    想要知道野指针危害到底有多大,首先需要知道野指针是怎么形成的,以及形成野指针会带来什么本质上的缺点。 当然,野指针...

  • Android AddressSanitizier

    Asan是一个快速的内存错误检测器,它可以检测C、C++代码中的例如野指针和内存溢出错误,具体可以分为以下几类: ...

网友评论

      本文标题:野指针检测

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