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语言程序的调试方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用VC6.0对C语言程序进行调试的基本手段分享

    (1)设置固定断点或临时断点 所谓断点,是指定程序中的某一行,让程序运行至该行后暂停运行,使得程序员可以观察分析程序的运行过程中的情况.这些情况一般包括: ①在变量窗口(Varibles)中观察程序中变量的当前值.程序员观察这些值的目的是与预期值对比,若与预期值不一致,则此断点前运行的程序肯定在某个地方有问题,以此可缩小故障范围.例如以下程序是计算cos(x)并显示,运行时发现无论x输入为多少,结果都是0.046414. 复制代码 代码如下: #include <stdio.h>#includ

  • c语言程序调试方法整理

    c语言程序的调试方法 所谓程序调试是指对程序的查错和排错. 调试程序一般应经过以下几个步骤: 一.先进行人工检查,即静态检查. 在写好一个程序以后,不要匆匆忙忙上机,而应对程序进行人工检查.这一步十分重要,它能发现程序设计人员由于疏忽而造成的 多数错误.这一步往往容易被人忽视,总希望把一切都推给计算机去做,但这样会多占用机器时间,作为一个程序人员应当养成严谨的作风,每一步都要严格把关,不把问题留给后面的工序. 为了更有效地进行人工检查,所编的程序应力求做到以下几点: ①应当采用结构化程序方法编程

  • VS2019调试C语言程序(监视操作)的详细步骤

    目录 前言 第一步设置断点: 第二步添加监视元素: 第三步调试: 总结 前言 在我们编写代码的时候我们经常是遇到与答案不符啊,数组越界啊等问题,有的时候我们的错误在一些不显眼的地方,我们发现不了,但是我们可以确定是那一部分出现了错误,这个时候我就需要去调试. 小白曾经就有一段时间很煎熬,并不知道调试的重要性,根本就没把他放在眼里,觉得自己完全OK,错误都可以找出来,但是年少轻狂,这不被打脸了. 所以在这里给大家安排一下VS2019的如何调试,如何去调出监视窗口. 第一步设置断点: 第一种方法:

  • .NET程序调试技巧(一):快速定位异常的一些方法

    作为一个程序员,解BUG是我们工作中常做的工作,甚至可以说解决问题能力是一个人工作能力的重要体现.因为这体现了一个程序员的技术水平.技术深度.经验等等. 那么在我们解决BUG的过程中,定位问题是非常重要的.有句话叫"发现问题是解决问题的一半. 本文讲述就快速定位异常(专指.NET程序异常)的方法.包括在本机定位异常,在客户环境定位.net程序异常,在客户环境定位SilverLight异常. 一:定位本机异常 在我们本机定位异常很容易.假设我们都是使用的的VisualStudio,那么只需要在调试

  • Vue程序调试的方法

    1.写本文的背景 因为程序的调试非常重要,程序猿可以利用好的调试方法去查找定位自己的问题所在之处.从而,达到纠正自己程序错误的地方,健壮自己的程序,让问题变得越来越少,程序变得越来越健康.故作此文,而且日后会将实用的调试程序方法不断进行迭代更新. 2.调试与测试 调式与测试实际有异曲同工之妙,只不过对象不同.测试面向的是产品级,系统级:而调试往往是程序里的某一部分,某个方法,某个属性或者对象.最终效果也很类似,好的测试人员,测试方案可以将产品系统的问题解决在摇篮中:好的调试方法也会让你对程序的运

  • 利用Pycharm断点调试Python程序的方法

    1.代码 准备没有语法错误的Python程序: #!/usr/bin/python import numpy as np class Network: def __init__(self,sizes): self.num_layers=len(sizes) self.sizes=sizes self.biases=[np.random.randn(y,1) for y in sizes[1:]] self.weights=[np.random.randn(x,y) \ for x,y in zi

  • 使用VSCode开发和调试.NET Core程序的方法

    电脑不想装几十个G的 VS2017,那就用 VS Code 吧 目标: 创建一个类库项目 Skany.Core,并用 Nuget 引用第三方组件 Hash 实现加密算法 创建一个单元测试项目 Skany.Tests,引用类库 Skany.Core,并测试其中的方法 创建一个控制台应用程序项目 Skany.Output,引用类库 Skany.Core,并输出方法执行结果 创建一个解决方案 Skany.sln,包括以上三项目 环境 .NET Core SDK 2.2.202 开始 首先在 VS Co

  • vscode调试container中的程序的方法步骤

    在写cmu14-445的project时,我希望在本地vscode编辑代码,然后在docker中编译和测试代码.但是如果测试出了问题,直接在本地调试就变得麻烦了.所以希望利用vscode进行远程调试. 参考官方文档,利用ssh + pipeTransport来完成,下面是我的launch.json和tasks.json最后的样子. { // Use IntelliSense to learn about possible attributes. // Hover to view descript

  • JavaScript语言精粹经典实例(整理篇)

    数据类型 JavaScript 是 弱类型 语言,但并不是没有类型,JavaScript可以识别下面 7 种不同类型的值: 基本数据类型 1.Boolean 2.Number 3.String 4.null 5.undefined 6.Symbol Object 1.Array 2.RegExp 3.Date 4.Math 5.... 可以使用 typeof 判断数据类型,操作符返回一个字符串,但并非返回的所有结果都符合预期 typeof false // "boolean" type

  • Linux环境下段错误的产生原因及调试方法小结

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的"段错误"(Segmentation Fault).借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决. 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况.这里贴一个

随机推荐