linux野指针追踪,论野指针BUG查找方法

一般raw指针的使用才会容易出现这类问题,使用了指针管理的一般不容易出现因此这里不阐述(shared_ptr unique_ptr)等。

在展开叙述前,我们先看看下面的实现原理和方案:

1.在Unity引擎中GameObject等unity内置对象,如果被Destroy后,所有的 引用变量都会变为null,Unitiy做到这一点的方法是类似于重载== !=等操作符,使用前,确认一下cpp侧的指针是否有效。

这里得到的启示是指针可以不直接使用,通过封装的方式保持一个handle,通过handle去指代真实指针,来实现可追踪,可记录,可有效性验证。

2.PhysX物理引擎中,内存分配清理调用点都会记录文件函数 行号等RTTI信息,以供日志输出。

野指针形成的根本原因是 析构了的指针,还在被使用。生命周期管理逻辑混乱,异常处理,时序,多线程访问等都会导致这些问题。

所以BUG查找就变为,内存清理点调用的逻辑正确性是查找BUG的切入点,追踪到清理调用点,这个可以通过记录RTTI信息来查找到哪一行代码引发的清理,接下来就是通过阅读代码逻辑来查找代码逻辑的正确性了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值