Debug心得与大家一起分享

liuwei200000 2008-10-18 01:59:20
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。

总结:大家常知道该怎么做,但一段时间为写代码或工作进度赶得急,往往会把这些必须处理的问题为处理,但只要你能迅速的解决此问题还是能弥补的。^_^

因此,你一定要切记成员变量的初始化,其它变量声明后,也要记得初始化。

有新的咚咚要跟踪,今天暂写于此。待续……

...全文
160 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangjinming8888 2008-10-22
  • 打赏
  • 举报
回复
支持 ~ 谢谢
liuwei200000 2008-10-22
  • 打赏
  • 举报
回复
n_yHHy_n 2008-10-18
  • 打赏
  • 举报
回复
mark
yangyoucheng22 2008-10-18
  • 打赏
  • 举报
回复
谢谢楼主分享,编程习惯很重要
maying_11 2008-10-18
  • 打赏
  • 举报
回复
严重支持楼主
ok208043624 2008-10-18
  • 打赏
  • 举报
回复
mark
3x
野男孩 2008-10-18
  • 打赏
  • 举报
回复
赞分享,我也来分享一下:

实战:结合Dr.Watson系统日志和Vc6来定位多线程环境下程序异常退出的错误http://blog.csdn.net/coding_hello/archive/2008/09/29/2994158.aspx

VC++6.0调试篇:内存断点
http://blog.csdn.net/coding_hello/archive/2008/03/08/2157908.aspx

VC++6.0调试篇:运行时间的观察--watch窗口的技巧
http://blog.csdn.net/coding_hello/archive/2008/03/16/2187217.aspx

VC++6.0调试篇:运行时间的观察--watch窗口的技巧续
http://blog.csdn.net/coding_hello/archive/2008/09/08/2901169.aspx
liuwei200000 2008-10-18
  • 打赏
  • 举报
回复
编成习惯固然重要,但不是每个人在在任何时候都能按规范办事,即使是编成高手,何况现在开发项目组的人员过多,项目大时,低级错误谁都可能犯。版本在发布之际,bug列表中若有程序异常退出,你必须的解决。代码编写是一半,debug也占半个江山啊。
palmax 2008-10-18
  • 打赏
  • 举报
回复
接分


其实最重要的还是编程习惯
scq2099yt 2008-10-18
  • 打赏
  • 举报
回复
up
waitling23 2008-10-18
  • 打赏
  • 举报
回复
学习了,支持楼主!
babyyang1213 2008-10-18
  • 打赏
  • 举报
回复
呵呵,补充一下:
减少软件Bug的还有一个重要方法就是单步调试。
代码写好后,一定单步走看看逻辑和自己想的是否一样。
gyk120 2008-10-18
  • 打赏
  • 举报
回复
学习了
其实楼主可以看看《软件调试》这本书,这书上很多东西都很有用的
zqh886 2008-10-18
  • 打赏
  • 举报
回复
受益匪浅~~~
顶!!!
VsirSoft 2008-10-18
  • 打赏
  • 举报
回复
支持 ~
kintalent 2008-10-18
  • 打赏
  • 举报
回复
支持楼主!
pingshibugaoxing 2008-10-18
  • 打赏
  • 举报
回复
支持,顶
clever101 2008-10-18
  • 打赏
  • 举报
回复
支持楼主分享经验!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧