Debug心得与大家一起分享
来源:互联网 发布:开淘宝店怎样描述店铺 编辑:程序博客网 时间:2024/05/14 20:14
Debug心得与大家一起分享
在程序即将发布前,你会遇见很多莫名其妙的死机、异常及不可重现的程序退出等bug。
在此我简要的把我最近及这几年中遇见的比较常见及棘手的bug,一一列举出来,以抛砖引玉,希望大家把自己在平时中好的debug方法贴出来与大家一起分享。
一、Release与debug环境下代码编译出来的差别:
大家可能经常遇见在debug环境下跑的很正常的程序,在release下就莫名其妙的挂机了,引起这种情况发生的原因很多,下面我将我最近开发中遇见的问题及解决方法一一列举出来。
1、 成员变量未初始化
一个大的项目有好几人甚至几十人开发,不同的开发经历及开发习惯,很容易忽略这个老生常谈的问题,但这往往是导致release下挂机debug下运行正常的罪魁祸首。那怎样揪出是谁,在什么地方忘记初始化成员变量了呢?
症状1:该问题引起的死机是必现的。
引起的原因:多为int、long型变量未初始化引起
解决方法:release下F5,重现bug,察看堆栈表可以找出引起挂机的工程及cpp文件。由于在release环境下无法看见个变量的真实值,你需将该工程设为调试模式(Vs2005直接在属性—配置属性—C/C++--优化—将“优化”选项设为禁用(/Od)即可,其他编译器你可以在网上搜索一下怎么配置)。
再次F5,重现bug,找出引起死机的那行代码,找出异常值(多为指针异常为空,多数是某int或long变量非法,即不是你真实像要得值),一步一步找出是在何处给该变量赋的值,最终会找到某成员变量未初始化的地方,将其初始化。
在此,可能有人会说,我把这些变量不可能出现的值过滤下,指针保护下,呵呵,在此我只是想告诉那些想真正找出问题所在的程序员该问题的原委。
再提醒哈,由于编译环境及不同的编译工具,此问题在release下并不一定必现。
总结:成员变量一定要记得初始化。
症状2:该问题引起的死机是必现的。
引起的原因:多为指针未初始化引起。删除了一个非空指针(常说的野指针)引起。
解决方法:F5找出引起程序直接退出的那行代码,将该指针初始化即ok。
总结:大家常知道该怎么做,但一段时间为写代码或工作进度赶得急,往往会把这些必须处理的问题为处理,但只要你能迅速的解决此问题还是能弥补的。^_^
因此,你一定要切记成员变量的初始化,其它变量声明后,也要记得初始化。
有新的咚咚要跟踪,今天暂写于此。待续……
年前写的,放在自己博客里
- Debug心得与大家一起分享
- 很高兴与大家一起分享心情!
- 项目经理总结了一些心得,和大家一起分享:
- ORACLE安装心得,大家一起分享,如果不对的地方,大家请指出来
- 记下有感触的东西,与大家一起分享
- 今天开通博客,很高兴,愿意与大家一起分享
- 开通了csdn博客,与大家一起分享!
- 好东东,大家一起分享
- 好东西大家一起分享
- 与大家分享一点有关编程的心得
- VS2003安装心得-拿出来与大家分享
- VS2003安装心得-拿出来与大家分享
- 技巧心得:大家一起BS联想笔记本
- 五十道编程小题目,大家有时间也做做啊,一起交流算法与心得
- 五十道编程小题目,大家有时间也做做啊,一起交流算法与心得
- 好消息和大家一起分享啊!!
- 一些免费课程和大家一起分享
- js好东西,大家一起分享
- 用JTabbedPane实现多选项卡的功能
- 关于飞机射击类游戏的设计原理
- jmail组件如何通过邮件网关的过滤
- 分析:互联网商业模式更应关注成本
- 牛年大吉开门红 O(∩_∩)O哈!
- Debug心得与大家一起分享
- SQL Server 2005中为基对象所在的数据库或架构等创建新的同义词
- CSDN的博客评论功能终于恢复了
- 细节区分
- Copy Dll File And Reg
- form 身份验证 角色管理
- 错误:'DWRUtil'未定义如何解决?
- 细节
- 细节