一个双线程下同一时候操作指针变量导致野指针出现的问题总结

来源:http://blog.csdn.net/lezhiyong

问题:

在某项目的測试过程中,測试在高清压力測试过程中会偶尔出现RSS崩溃现象,崩溃时间不确定,因为在守护进程服务的守护下,RSS崩溃后被又一次拉起。所以这个故障在崩溃立即发送时在网管上并没有体现服务停止的告警,仅仅有当測试人员去RSS的var/run文件夹下找到edum***开头的文件才指定RSS发送崩溃。依据文件里提供的崩溃时间描写叙述。有时是几天前的,有时是几个小时前的。測试人员较难回顾其当时做了什么操作。

依据多个edum***文件打印出的崩溃时堆栈信息,每次崩溃出如今不同的调用代码逻辑中。这都给该问题的复现与定位造成一定困难。

问题根源:

崩溃线程崩中使用指针的真正创建与销毁地方在另另外一个线程中。崩溃线程仅仅是使用这个指针拷贝。
这两个操作发送在两个线程中。


问题总结:

对于野指针问题,当问题根源找到时认为问题比較轻松。但未找到前的排查真正做起来非常累,很多其它是考验定位人员的心理素养和分析能力,总结的一些经验例如以下:
1、须要从崩溃点上层各个调用对象作为中介从来源到去处引起共用指针的,要细心、耐心,把来源和去处一层层追根朔源才干发现问题。


2、要善于分析日志文件里提供的信息,当第一次崩溃是因为日志输出等级低信息量不足而且不能定位与解决该问题时候须要将日志输出等级调高并增加一些辅助定位的输出信息,在下一次崩溃时候输出的日志信息将提供非常大帮助。
3、解决野指针问题通过阅读代码非常重要,仅仅有这样才干对出问题时候程序线程执行的数量、执行功能和时序以及变量调用有清楚和全面的认识。
4、编敲代码时候尽量少用指针拷贝。假设不得以使用,编写代码一定要具备要有多线程执行意识,从根源上杜绝野指针的出现。   

原文地址:https://www.cnblogs.com/lcchuguo/p/5382119.html