现在的位置:主页 > 综合新闻 >

C语言程序调试常用技巧与常见错误分析

来源:电脑编程技巧与维护 【在线投稿】 栏目:综合新闻 时间:2020-05-29

【作者】网站采编

【关键词】

【摘要】作者: 高婷 摘要:在C语言程序的开发过程中经常会伴随着多次对C语言程序进行修改调试的过程。本文讨论了C语言程序调试中常用技巧,分析了调试中常见错误,旨在促进我们编写出正确

作者: 高婷

摘要:在C语言程序的开发过程中经常会伴随着多次对C语言程序进行修改调试的过程。本文讨论了C语言程序调试中常用技巧,分析了调试中常见错误,旨在促进我们编写出正确的程序,提高编程效率。

关键词:C语言;程序调试;常用技巧;常见错误

中图分类号:TP312.1 文献标识码:A 文章编号:1674-7712 (2012) 18-0032-01

当我们完成了C语言程序的源程序的编写之后,我们要使用C语言的编译器将其翻译成计算机能够执行的二进制代码形式的目标程序,再通过连接,最终形成可执行程序。但这个过程中可能会出现各类问题。比如编译未通过,连接未通过,或是生成了可执行程序,但并非我们的预期目标。

所谓程序调试,是指对程序的查错和排错。调试程序一般应经过人工检查,即静态检查;上机调试,即动态检查;运行程序,试验数据及检查和分析错误原因等几个步骤。

程序调试是一项细致深入的工作,需要下功夫、动脑子、善于累积经验。在程序调试过程中往往反映出一个人的水平、经验和科学态度。上机调试程序的目的决不是为了“验证程序的正确性”,而是“掌握调试方法和技术”。

一、调试过程中的一些常用技巧

1.先简后繁。先用一组简单的数据对程序进行测试,检验各函数是否有出错现象,然后用复杂数据对程序进行调试,直到确定程序对正常数据没有错误为止。

2.由大到小。出现错误时,要逐步缩小可能出现错误的范围,从整个程序到指定函数,再到指定区域,再到指定行。在对程序缩小范围或对编译没通过的程序缩小错误范围时可以用发“/* */”来进行调试,确定正常范围,缩小错误范围。

3.单步调试。编辑完C语言源程序并保存后,右按F8键进行主函数程序单步执行,如果源程序无语法错误,则每按一次F8键执行一句主函数程序,同时可用Ctrl+F7组合键设置所要跟踪的变量,以查看程序的执行进程,从而更容易查出程序的错误。但是,F8键只能单步执行主函数程序,它将调用非主函数视为一条语句执行,并不能转到被调函数的内部进行语句单步运行,所以在有些程序出错时,不能精确查出出错位置。因此,当主函数调用其它函数时,应当使用F7键,它能在F8键功能的基础之上,进一步深入到被调用函数内部,从而真正做到程序单步执行,即每按一次F7键,仅执行一条语句,遇到函数调用就转到被调用函数内部执行语句。当使用F8或F7进行单步调试时,应当用Ctrl+F7进行变量跟踪。

4.设置断点。断点就是程序运行中可能会中断的地方,方便开发者在程序运行的过程中查看程序当前的运行状态,比如变量的值、函数的返回值等等。F9用于在当前光标所在前行下断点,如果当前行已经有断点,则取消断点。有的地方不能下断点,比如空行、基本类型定义语句(未初始化)等等非执行语句。

二、常见错误分析

在实际的C语言编程过程中可能会出现各种各样的错误。这其中可能有算法错误,有因为对C语言中的某些语法知识理解的不正确而产生的错误,还有因为疏怱大意而产生的程序的录入错误等等。这些错误中,算法错误必须经过后期的试运行和调试才能解决,而其他错误是可以经过训练能够避免的。

(一)由于语法知识理解不正确而导致的错误

这类错误有时并不能被马上发现,因为有些情况下错误会被编译器识别并报错,而有些却不能被编译器识别,但运行结果却和预计的情况不一致。以下是在这方面常见的一些出错的情况。

1.转义字符的用法不当。决不能用的字符是由单个字符组成,而转义字符却是很特殊的一类字符,它是以一个键盘符号反斜杠“\\”开始后跟上单个字符或是若干个字符组成的,通常用来表示键盘上的控制代码或特殊符号,例如回车换行符、响铃符号等。程序设计过程中有时不能正确地区分转义字符和普通字符。

2.有符号型转换成无符号型。在数据类型中,有时候会遇到将有符号的数据转换成无符号的数据。要想解决这个问题,我们一定要明白数据在计算机中是如何存储的。数据在机器中的存储是以二进制补码形式存储,正数的符号“+”用二进制0表示,而负数的符号“-”用1来表示,正数的原码补码相同,但是负数的补码是其原码的二进制位取反加1。这样来回转换很麻烦,也容易搞错。

3.“%”的连续使用。在C语言中“%”作为格式描述字符用在输入输出语句中,当我们需要将多个 “%”一起作用时则应特别注意。

4.break语句和continue语句。如果程序设计者搞不清楚break语句和continue语句,没有真正理解两者的含义,所以也容易犯错误。这两个语句都可以用在循环语句中,但两者的作用不同。break语句主要的作用是用来跳出该循环,提前结束循环,接着执行循环语句下面的语句;而continue语句主要作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。

5.函数参数值传递。在函数参数传递的过程中,很多设计者很容易搞错实参在什么时候值不变,什么时候传值后改变。

6.带参宏定义的展开。C语言中带参的宏定义虽然看上去很简单,如果没有真正理解宏定义的话,在宏展开的时候很容易搞错。宏定义是通过#define开头的编译预处理命令来实现,在调用宏的时候要进行展开,并且再用实参去代换形参。

(二)录入过程中常见的错误

在源程序编辑过程中由于疏怱大意而产生的录入错误在所有的错误中不在少数,甚至占更大的比例,常见的错误有误把“=”作为“等于”比较符;使用自加(++)和自减(--)运算符时出错;混淆字符和字符串的表示形式;语句后面漏分号;输入输出的数据的类型与所用格式说明符不一致;忘记定义变量;未注意int型数据的数值范围;输入时数据的组织与要求不符;在不该加分号的地方加了分号;输入变量时忘记使用地址符;括弧不配对;switch语句的各分支中漏写break语句;引用数组元素时误用了圆括弧;对应该有花括弧的复合语句,忘记加花括弧;在用标识符时,忘记了大写字母和小写字母的区别;在定义数组时,将定义的“元素个数”误认为是“可使用的最大下标值”;误以为数组名代表数组中全部元素;对二维或多维数组的定义和引用的方法不对;混淆字符数组与字符指针的区别;用指针变量之前没有赋值;不同类型的指针混用;所调用函数在调用语句之后才定义,而又在调用前未加说明;将函数的形参和函数中的局部变量一起定义;函数的实参和形参类型不一致;没有注意函数参数的求值顺序;混淆数组名与指针变量的区别;误认为形参值的改变会影响实参的值;混淆结构体类型与结构体变量的区别,对一个结构体类型赋值;使用文件时忘记打开,或打开方式与使用情况不匹配。

以上只是列举了一些初学者常出现的错误,这些错误大多是由于对C语言的语法不熟悉造成的。对C语言使用多了,熟练了,错误自然就会减少了。在深入使用C语言后,还会出现其他一些更深入、更隐蔽的错误。

参考文献:

[1]韩京洋,向志强.C语言调试技巧[J].电脑编程技巧与维护,2012,16.

转载注明来源:https://www.xzbu.com/8/view-4550493.htm

文章来源:《电脑编程技巧与维护》 网址: http://www.dnbcjqywh.cn/zonghexinwen/2020/0529/345.html

上一篇:分析计算机网络木马入侵与防御方法
下一篇:计算机病毒防范方法及其措施

电脑编程技巧与维护投稿 | 电脑编程技巧与维护编辑部| 电脑编程技巧与维护版面费 | 电脑编程技巧与维护论文发表 | 电脑编程技巧与维护最新目录
Copyright © 2018 《电脑编程技巧与维护》杂志社 版权所有
投稿电话: 投稿邮箱: