Release下随机出现问题分析定位(Windows下)
2016-05-12 23:05
225 查看
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
最近碰到一个问题:Release随机出现,Debug下不出现的问题
a. 减少排查范围:用例中有很多元素,可以尝试删除掉某类元素,从而进一步减少排查范围
b. 确立排他条件:其他类元素同等条件会不会出问题
B. 添加日志代码跟踪:一步一步逼近问题点
界定范围之后,开始在预期出错的范围中添加日志,添加日志->重现->分析 -->添加日志-->重现-->分析 ... ,一步一步逼近问题点
形如myClass.num,使用的(myClass1.num > myClass2.num)判断的。
0x2074A901 cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc (这个也是咱们做VS调试时,经常看到的 0x cccc cccc值,变量未初始化时,存储的就是这个值。)
在Debug时,由于形如myClass.num是没有初始化的,myClass1.num > myClass2.num两个变量的值都是 0x cccc cccc,比较的结果是相等,是一个恒定值,所以不会出现随机情况。
但对于Release情况就不同了,内存没有初始化置值,随机的值,所以比较结果也是随机的。
a. 下次碰到Release随机重现,Debug不重现,要首先想到是 “变量未初始化的问题"
b. 尽早界定问题范围,方法参考第1节中
c. 对于界定到的范围,如果有思路,可以在debug下跟踪,查看有没有成员变量的值是 0x cccc cccc (用于检查是否初始化)
d. 如果没有解决的话,开始采用打日志方法来分析问题
最近碰到一个问题:Release随机出现,Debug下不出现的问题
1 分析的时候采用方法:
A. 先界定问题范围:通过进一步去掉影响因素,缩小定位问题的范围,例如a. 减少排查范围:用例中有很多元素,可以尝试删除掉某类元素,从而进一步减少排查范围
b. 确立排他条件:其他类元素同等条件会不会出问题
B. 添加日志代码跟踪:一步一步逼近问题点
界定范围之后,开始在预期出错的范围中添加日志,添加日志->重现->分析 -->添加日志-->重现-->分析 ... ,一步一步逼近问题点
2. 日志分析方法:
因为是随机问题,有正确的情况,也有错误的情况;拿出错误的和正确的日志两相对比,就可以确定出错的范围在哪一块了。3. 最终定位的结果是:
类中一个int变量使用时未初始化,导致Release时随机值;形如myClass.num,使用的(myClass1.num > myClass2.num)判断的。
4. 问题为什么会产生,为什么Debug时不重现?
在VS下面调试时,查看内存的信息,可以看到,对于未初始化的内存,VS缺省初始化内存中存储的是形如下面的值:0x2074A901 cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc (这个也是咱们做VS调试时,经常看到的 0x cccc cccc值,变量未初始化时,存储的就是这个值。)
在Debug时,由于形如myClass.num是没有初始化的,myClass1.num > myClass2.num两个变量的值都是 0x cccc cccc,比较的结果是相等,是一个恒定值,所以不会出现随机情况。
但对于Release情况就不同了,内存没有初始化置值,随机的值,所以比较结果也是随机的。
5. 后续如何快速的找出这种问题的原因并解决
关于这个问题,不同情况确实没有恒定的方法。不过有些思路可能有助于帮忙a. 下次碰到Release随机重现,Debug不重现,要首先想到是 “变量未初始化的问题"
b. 尽早界定问题范围,方法参考第1节中
c. 对于界定到的范围,如果有思路,可以在debug下跟踪,查看有没有成员变量的值是 0x cccc cccc (用于检查是否初始化)
d. 如果没有解决的话,开始采用打日志方法来分析问题
6. 建议写代码时,对新增代码做静态检查:通过静态检查查该类变量未初始化的问题效率较高,切防患于未然。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
相关文章推荐
- OpenJudge 7627 鸡蛋的硬度
- 上楼梯
- iOS基础开发-字典转模型(模型思想)
- 【Qt】标准颜色对话框类
- OpenJudge 7627 鸡蛋的硬度
- 在Android studio IDE中采用自己编写的Android.mk
- 基于Servlet+JSP+JavaBean开发模式的用户登录注册
- hihocoder 1066 无间道之并查集
- Material Design控件介绍(二)——TabLayout
- Ubuntu安装git与版本库的创建
- 阿里13年研发笔试题 - 寻找有序数组中元素值等于其下标的所有元素
- 啊哈哈哈哈,路径路径
- Java 版 (精华区)--Frame和Panel的区别【转载
- 两个java数组删除相同元素
- SQLMAP注入神器笔记
- bzoj3670动物园【NOI2014】
- CentOS 7 YUM 安装 Nginx
- 第7周 C语言程序设计(新2版) 练习1-19 颠倒字符串中的字符
- Material Design控件介绍(一)——Toolbar,DrawerLayout,NavigationView
- HDU 5597 GTW likes function 欧拉函数