程序调试

2023-11-02

我高中接触过VB语言(当时主要是用笔抄写书中代码),写过一个计算器。
大学主要写 C++程序,工作后需要一些脚本,写过一段时间Python。
下面主要是针对C++程序。

问题分类:

在编程中很容易就会出现各种各样的问题,我觉得初步可以分为下面几种类型:
1、代码编译不成功。
2、编译成功,运行出错。
3、运行后得不到想要的结果。
4、内存泄漏。
下面分别来说一下:

第一类问题

这类问题应该是最好解决的,编译器直接给出代码出错的位置和出错原因,直接复制到google就可以得到答案,如果你没有找到答案,那恭喜你,这个问题解决了,你就是第一人。我所遇到的这类错误一般是变量未定义、类型不匹配、链接不成功(一般是缺少链接库文件,或是函数只写了定义,没有写实现)。

第二类问题

运行的时候,程序直接崩溃,显示内存出错。此类问题可能是由于申请的内存太小、数组读取或写入时,超过下标、变量未初始化。
如何定位出错的代码,动态调试,使用编译器的单步运行;如果是内核程序,不方便动态调试,我的方法是在感觉可能出问题的地方加入输出代码,加载程序,通过判断输出,来缩小范围,进行定位;当然,最好的方法是大脑回溯,在崩溃之前修改了哪些代码,将它们都注释起来,逐句添加,定位到哪一句出的问题。

第三类问题

可以多次运行,看是否输出的结果会变化,如果变化,可能是由于变量未初始化;最简单的方法就是直接单步跟踪,从结果结果的地方向前推进,找出问题所在。
第四类问题是最危险的,一般不容易发现,有时间需要运行一天,才会发现问题,对于这类问题,要注意代码中的malloc\realloc\ free\new\delete等函数,网上也有一些内存泄漏检测工具。在C++中char与tchar转换的一个宏W2A和A2W存在内存泄漏问题,如果循环使用的话,不建议使用该宏。
对于代码出错,首先要进行的是把范围缩小,缩小到一个点,如果是自写的某个函数出错,只有两种可能,参数传入不对,函数体写的有问题,确定问题到底出现在哪,逐个击破。
调试程序很容易让人崩溃,解决不了,可以先放一下,每天都看一下,肯定有收获。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序调试 的相关文章

随机推荐