VC++程序调试

VC++程序调试,第1张

1          前言

      当程序的运行结果与程序员预想的不一样,如死机,计算值不正确,出现内存访问冲突等,就需要进行调试

2          进行调试前的准备工作

      因为程序调试是一项十分耗时的工作,很难估计出将要花费多长时间,因此在调试前,一定要做好充分准备,尽量避免做无用功:

1.     构造好的测试步骤,让程序出错有规律性或出错的概率越大越好

2.    被调试程序及相关库是最符合要求的版本

3.    工程临时文件如.ncb被删除

4.    整个工程被重新编译

5.    应用程序的链接路经与调试路径保持一致

6.    单体测试全部通过

3          出错位置和原因的确定

3.1      几种典型错误的原因

1 内存莫名其妙的失效

原因:内存指针被多处引用,被多处释放

2 多线程条件下死机

原因:线程中由于用了SendMessage而造成死锁,可人为加入消息循环

3 多线程条件下内存访问冲突

原因:内存被多个线程同时使用,可加入线程同步机制(用消息队列,信号灯等)

4 内存访问冲突

原因:内存越界(如字符串拷贝,内存拷贝)

5 窗口消息的次序问题

原因:如窗口未初始化就开始用

 

3.2      定位错误的位置

1 对代码的理解越深,对代码出错位置的确定越精确,必要时应画出相关代码的类图和时序图

2 从IDE调用堆栈判断出错位置和原因

3 从Win32 API或MFC类库函数的返回错误码判断出错原因,返回错误码的含义可以从MSDN或源代码中找到,还可以通过VC工具Error lookup找到

4 在代码中加入带编号的TRACE语句或MessageBox(release版),逐步缩小调试范围

5 对于死机现象或偶发现象,可通过逐步注释掉代码的方法确定死机的位置和原因

6 如果死机现象或偶发现象是新出现的,可以通过比较目前版本和上一版本的差异来确定位置和原因

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/2085738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-07-22
下一篇 2022-07-22

发表评论

登录后才能评论

评论列表(0条)

保存