c语言程序调试方法整理

 更新时间:2020年03月02日 09:59:11   作者:angryTom  
在本篇文章里小编给大家正里的是关于c语言程序调试方法整理内容,需要的朋友们可以学习下。

c语言程序的调试方法

所谓程序调试是指对程序的查错和排错。

调试程序一般应经过以下几个步骤:

一、先进行人工检查,即静态检查。

在写好一个程序以后,不要匆匆忙忙上机,而应对程序进行人工检查。这一步十分重要,它能发现程序设计人员由于疏忽而造成的

多数错误。这一步往往容易被人忽视,总希望把一切都推给计算机去做,但这样会多占用机器时间,作为一个程序人员应当养成严谨的作风,每一步都要严格把关,不把问题留给后面的工序。

为了更有效地进行人工检查,所编的程序应力求做到以下几点:

①应当采用结构化程序方法编程,以增加可读性;

②尽可能多加注释,以帮助理解每段程序的作用;

③在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。各函数之间除用

参数传递数据外,尽量少出现耦合关系,这样便于分别检查和处理。

二、在人工检查无误后,再上机调试。

通过上机发现错误称为动态检查。在编译时会给出语法错误的信息,调试时可以根据提示信息具体找出程序中出错之处并改正。应

当注意的是有时提示出错的地方并不是真正出错的位置,如果在提示出错的行找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多且各种错误互有关联,因此要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。

如果系统提示的出错信息很多,应当从上到下逐一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能

只有一二个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息。这时只要加上一个变量定义,就所有错误都消除了。

三、在改正语法错误(包括“错误(error)”和“警告(warning)”)后,程序经过连接(link)就得到可执行的目标程序。

运行

程序,输入程序所需数据,就可得到运行结果。应当对运行结果作分析,看它是否符合要求。有的初学者看到运行结果就认为没问题了,不作认真分析,这是危险的。

有时,数据比较复杂,难以立即判断结果是否正确。可以事先考虑好一批“试验数据”,输入这些数据可以很容易判断结果正确与

否。例如解方程ax2+bx+c=0,输入a、b、c的值分别为1、-2、1时,根x的值是1。这是容易判断的,若根不等于1,程序显然有错。

但是,用“试验数据”时,程序运行结果正确,还不能保证程序完全正确。因为有可能输入另一组数据时运行结果不对。例如,用公式求根x的值,当a≠0和b2-4ac>0时,能得出正确结果,当a=0或b2-4ac<0时,就得不到正确结果(假设程序中未对a=0作防御处理以及未作复数处理)。因此应当把程序可能遇到的各种情况都一一试到。例如,if语句有两个分支,有可能程序在经过其中一个分支时结果正确,而经过另一个分支时结果不对。必须考虑周全。事实上,当程序复杂时很难把所有的可能情况全部都试到,选择典型的临界数据作试验即可。

四、运行结果不对,大多属于逻辑错误。对这类错误往往需要仔细检查和分析才能发现。可以采用以下办法:

1.将程序与流程图仔细对照,如果流程图是正确的,程序写错了,是很容易发现的。例如,复合语句忘记写花括弧,只要一对照流

程图就能很快发现。

2.如果实在找不到错误,可以采用“分段检查”的方法。在程序不同的位置设几个printf函数语句,输出有关变量的值,逐段往下

检查。直到找到在某一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就能发现错误所在。

3.也可以用“条件编译”命令进行程序调试(在程序调试阶段,若干printf函数语句就要进行编译并执行。当调试完毕,这些语句

不用再编译了,也不再被执行了)。这种方法可以不必一一去掉printf函数语句,以提高效率。

4.如果在程序中没有发现问题,就要检查流程图有无错误,即算法有无问题。如有则改正之,接着修改程序。

5.有的系统还提供debug(调试)工具,跟踪程序并给出相应信息,使用更为方便,请查阅有关手册。

总之,程序调试是一项细致深入的工作,需要下功夫,动脑子,善于积累经验。在程序调试过程中往往反映出一个人的水平,经验

和态度。希望大家给以足够的重视。上机调试程序的目的决不是为了“验证程序的正确”,而是“掌握调试的方法和技术”,要学会自己找问题,这样慢慢自己就会写出错误较少的实用程序。

到此这篇关于c语言程序调试方法整理的文章就介绍到这了,更多相关c语言程序的调试方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言的递归函数详解

    C语言的递归函数详解

    这篇文章主要为大家介绍了C语言的递归函数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C++中赋值运算符与逗号运算符的用法详解

    C++中赋值运算符与逗号运算符的用法详解

    这篇文章主要介绍了C++中赋值运算符与逗号运算符的用法详解,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言多媒体框架GStreamer入门和概述

    C语言多媒体框架GStreamer入门和概述

    这篇文章主要介绍了C语言多媒体开源框架GStreamer,本文总结了多媒体框架GStreamer一些基本概念及流程,希望能给使用GStreamer开源库的朋友提供一个借鉴或参考,需要的朋友可以参考下
    2022-07-07
  • C++中的const的使用详解

    C++中的const的使用详解

    这篇文章主要介绍了 C++中的const的使用详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++ 基数排序的实现实例代码

    C++ 基数排序的实现实例代码

    这篇文章主要介绍了C++ 基数排序的实现实例代码的相关资料,这里附有实例代码,帮助大家学习理解,需要的朋友可以参考下
    2016-11-11
  • C++中NULL与nullptr的区别对比

    C++中NULL与nullptr的区别对比

    nullptr是c++11中的关键字,下面这篇文章主要介绍了C++中NULL与nullptr区别的相关资料,对大家来说还是挺实用的,需要的朋友可以参考下
    2021-05-05
  • C++ RBTree红黑树的性质与实现

    C++ RBTree红黑树的性质与实现

    红黑树是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black;通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是平衡的
    2023-03-03
  • C语言中计算字符串长度与分割字符串的方法

    C语言中计算字符串长度与分割字符串的方法

    这篇文章主要介绍了C语言中计算字符串长度与分割字符串的方法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C++中实现矩阵的加法和乘法实例

    C++中实现矩阵的加法和乘法实例

    这篇文章主要介绍了C++中实现矩阵的加法和乘法实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • C++ Protobuf实现接口参数自动校验详解

    C++ Protobuf实现接口参数自动校验详解

    用C++做业务发开的同学是否还在不厌其烦的编写大量if-else模块来做接口参数校验呢?今天,我们就模拟Java里面通过注解实现参数校验的方式来针对C++ protobuf接口实现一个更加方便、快捷的参数校验自动工具,希望对大家有所帮助
    2023-04-04

最新评论