文档库 最新最全的文档下载
当前位置:文档库 › 任务5 程序调试与测试 - 习题答案

任务5 程序调试与测试 - 习题答案

任务5 程序调试与测试 - 习题答案
任务5 程序调试与测试 - 习题答案

任务 5 程序调试与测试——调试猜数程序

习题答案

1. 列举出Python 的常见错误的类型,并举例简要说明各类错误的特点。

答案:

语法错误:语法是程序的结构及其背后的规则。语法错误在Python 解释器将源代码转换为字节代码时产生,说明程序的结构有一些错误。如果程序中存在语法错误,那么Python解释器会显示一条错误信息,然后停止运行程序。例如:省略了def 语句后面的冒号会产生类似Syntax Error: invalid syntax错误信息。在编程生涯的初期,我们可能会花大量时间追踪语法错误,但是随着经验的不断积累,我们在编程中的语法错误会越来越少,发现错误的速度也会更快。

运行时错误:之所以称之为运行时错误,是因为这类错误只有在程序开始运行后才会出现。这类错误也被称为异常 (exception),大多数运行时错误会包含诸如错误在哪里产生和正在执行哪个函数等信息。例如:无限递归最终会导致maximum recursion depth exceeded (超过递归最大深度)运行时错误。

语义错误:“语义”即与程序的意思的有关,语义错误有时候也称之为逻辑错误。如果程序中存在语义错误,程序在运行时不会产生错误信息,但是也不会返回预期的结果。例如:一个表达式可能因为没有按照预期的顺序执行,因此产生了错误的结果。严格来说,程序的运行状态是正常的,程序按照程序员的命令序列执行,程序没有错,错在编写程序的人。

2. 使用pdb模块对Python程序调试主要有哪几种用法?

答案:

pdb可以在命令行中以脚本模式启动,也可以在交互解释器中使用pdb模块的函数启动调试器,还可以在程序中嵌入代码启动pdb。

(1)以脚本模式启动pdb

在命令行中,可以以脚本形式调用pdb,pdb将在文件的第一行代码之前暂停执行,以脚本形式调用的pdb执行单步调试。

(2)在交互式解释器中启动pdb

以脚本形式启动pdb在调试过程中比较烦琐,如需对文件进行修改、保存、执行等,在实际调试过程中人们经常利用Python便捷的交互式解释器来启动pdb进行调试。在交互式解释器中启动pdb调试,首先应当先使用import pdb语句导入pdb模块,然后利用pdb模块中的run、runeval和runcall等函数进行调试。

(3)在代码中嵌入pdb

在Python中,也可以将pdb模块中的set_trace函数直接编写在源码中,设置硬断点。

当程序执行到pdb.set_trace()时,就会进入到(Pdb)命令提示符状态,这时就可以执行pdb调试命令。直接在源码中执行pdb的好处是如果程序以为异常而无法继续执行下去,就可以用pdb.pm()回到异常执行的上一步,以便进行相关变量的查看。

3. pdb模块常用的调试命令有哪些,分别具有什么功能?

答案:

常用pdb调试命令及其功能

4. logging模块的日志级别有哪些?

答案:

logging模块的重点在于生成和处理日志消息。每条消息由一些文本和指示其严重性的相关级别组成。级别对应一个非负整数值,这些不同的级别是整个logging模块中的各个函数和方法的基础。系统默认提供了6个级别,开发人员可以自定义其他日志级别,但是不推荐这样做,尤其是在开发供他人使用的库时,因为这样会导致日志级别的混乱。默认的6个级别分别见下表:

日志默认重要性级别

上面表格中的日志等级是从上到下依次升高的,即:NOTSET< DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次减少的。logging模块也可以指定日志记录器的日志级别,只有级别大于或等于该指定日志级别的日志记录才会被输出,小于该等级的日志记录将会被丢弃。

5. 简述使用unittest测试框架进行单元测试的流程。

答案:

使用unittest进行单元测试可以分为两个步骤:编写单元测试和运行单元测试。

下面以math_function.py为例,简要说明步骤

(1)编写单元测试

math_function.py在math_function.py同一目录下新建一个文件test_math_function.py,具体代码如下

(2)运行单元测试

运行单元测试的方法有很多种,常用的方法主要有两种:

(1)直接在程序中启动

最简单的运行方式是在测试文件的最后加上两行代码:

这样就可以把测试用例文件当作正常的Python脚本运行:

程序运行后,unittest.main()方法会搜索test_math_function.py模块下所有以test开头的测试用例方法,并自动执行它们。

(2)在命令行中运行

另一种更常见的方法是在命令行通过参数-m unittest直接运行单元测试,这是推荐的做法,因为这样可以一次批量运行很多单元测试,并且,有很多工具可以自动来运行这些单元测试,命令格式如下。

在本例的运行结果如下所示。

大全程序调试实验报告

微机原理与接口技术 课 程 作 业 班级: 目录

一、实验目的: 汇编语言是一种用助记符表示的程序设计语言。用汇编语言编写的源程序生成的目标代码短,占内存少,执行速度快,适合于系统软件、实时控制软件、I/O接口驱动等程序设计。通过本次实验,熟练掌握汇编程序的调试,深入了解MASM汇编语言及其程序设计方法。 二、实验环境 EDIT编辑器、MASM汇编程序、LINK连接程序、TD调试程序 三、实验过程 (一)基础知识储备 1.了解微处理器80486的内部结构、寄存器组、工作模式等基本知识。 2.熟练掌握微处理器指令系统的相关知识,重点掌握80486的寻址方式和常用的指令格式及功能。 3.了解MASM汇编语言及其程序设计方法。掌握MASM汇编语言的语句格式、语法规则、常用伪指令及DOS功能的调用等。了解顺序结构、分支结构、循环结构和子程序的设计方法。 (二)汇编语言程序设计 1.分析问题,明确要解决的问题和要求。 2.确定解决问题的思路和方法。 3.将解决问题的方案编制成程序流程图。 4.根据流程图,逐条编写程序。 5.上机调试,验证程序是否正确。 (三)汇编程序调试 MASM汇编程序的主要功能是:把源文件转换成用二进制代码表示的目标文件,并生成列表文件;在转换过程中汇编程序将对源程序进行扫描,检查源程序是否有语法错误并指出源程序的语法错误。

汇编语言源程序的调试过程需要经过编辑、汇编、连接、运行、调试等几个步骤: 1.编辑:使用编辑程序,将编写好的程序输入计算机,建立一个扩展名为ASM的汇编语言源文件*.ASM。 2.汇编:使用汇编程序,将*.ASM文件经汇编后生成扩展名为*.OBJ。 3.连接:使用连接程序,把一个或多个目标程序连接成可执行文件*.EXE。 4.运行:运行可执行文件,验证程序是否正确。 5.调试:如果运行中有问题,可使用编辑或调试程序进行修改和调试,重复上述步骤,直到运行正确为止。 四、调试实例 (一)实例一 要求:编写程序,将MBUF为起始单元的5个数按相反次序传送到NBUF开始的存储单元中。 实验思路:本例采用顺序结构和循环结构,合理利用堆栈,通过堆栈实现数据按照相反次序传送。源程序: DATA SEGMENT ;数据段开始 MBUF DB 0,1,2,3,4 ;每个数据分配一个存储单元 NBUF DB 5 DUP(0) ;空5个存储单元备用 DATA ENDS ;数据段结束 STACK SEGMENT PARA STACK ;堆栈段开始,定位类型是PARA DB 100 DUP(0) STACK ENDS CODE SEGMENT ;代码段开始 ASSUME CS:CODE, DS:DATA,SS:STACK ;段分配伪指令 START: MOV AX,DATA ;数据传送 MOV DS,AX ;存储器数据传送到段寄存器中 MOV SI,OFFSET MBUF ;取第一组操作数的偏移地址 MOV DI,OFFSET NBUF ;取第二组操作数的偏移地址 MOV CX,5 ;数据个数5传送到CX中 LOP1: MOV AX,[SI] ;数据传送 PUSH AX ;数据入栈 INC SI ;指针加1 LOOP LOP1 ;循环 LOP2: POP AX ;数据出栈 MOV [DI],AX ;数据传送 INC DI LOOP LOP2 MOV AH,4CH ;终止进程 INT 21H CODE ENDS END START

PLC程序的调试方法及步骤(精)

PLC程序的调试方法及步骤 PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,最好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。 1.程序的模拟调试 将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。 在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。 如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟测试结束后再写入它们的实际设定值。 在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。 2.程序的现场调试 完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,通常只

3-2节 程序调试的方法

3-2节程序调试的方法 编程是一件需要认真和细心的工作。通过让学生从李明同学学习程序设计时所遇到的困难和他情感上所表现出来的“窘态”故事开始,道出程序调试不但需要技巧、更需要有耐心和毅力的道理,从而激发学生学习程序调试的兴趣和热情,拉开了本节的充幕。 接着,布置任务,让学生输入课本P83四段有错误的程序,要求学生自己探究,并改正程序。 最后分析程序运行的情况,总结出程序运行出错的四种类型: 一、拼写错误 1)在工程窗口中,看到红色文字显示的程序是有拼写错误的。 2)同时还要检查其它的拼写错误 Pring改为print Integr改为integer 2、编译时出现的错误 S应该改为a 3、运行时出现的错误 运行时的错误是指编译通过后,在执行程序时出现的错误,如用0作除数等。

例如:a=0的时候,将会出现0作除数的情形 4、逻辑错误 程序运行后,得出的结果不是正确的。这说明程序存在逻辑错误。逻辑错误产生 的原因很多,运算符使用不正确、语句次序不对、循环的设置不对等都可以产生 逻辑错误。 如这里的程序的出口应该是tree>=100 任务: P85 马上行动:

你和同学们能解决以上的问题吗?以合作、交流的方式大胆尝试一下,你会有意外的收获! 一、本节小结: 本节主要通过任务驱动、探究的形式,介绍了程序的错误类型,分析了产生错误的原因,程序的调试与排错的方法,让学生“从做中学”,进一步体验了程序调试的方法和技巧,培养了 学生调试程序的耐心和毅力,提高了学生程序设计的素养。 五、课外练习 编写一个程序,将从键盘输入的一个自然数进行因数分解,输出结果并上机验证。

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入 变量 这样可以比较好地找到问题 二,msgbox 三,监视窗口,如下面的例子 For i=1 to 10000 A=sqr(i) next i 你想再监视当i=799时A的值,就可以添加监视,方法:点调试,添加监视,选择“当监视值为真时中断”,上面表达式框中写上i=799, 这样你按F5,运行程序,程序会在i=799时中断。其他选项你可以自己去琢磨一下。 一个程序如何顺利的“脱产”,调试的过程是非常重要的。学过、钻研过程序设计的人都有同样的感受,很多情况下,调试程序的过程会比程序编写的过程更为困难。任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。 程序中的典型错误类型 A类:语法错误。 B类:编译错误。

C类:属性设置错误。 D类:逻辑错误。 调试方法 方法一:利用“MSDN帮助菜单” “MSDN帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。 不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。

PLC程序调试方法及步骤

来源:中国物资采购网时间:2010年5月6日11时20分【大中小】PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,最好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。 1.程序的模拟调试 将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。 在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。 如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟调试结束后再写入它们的实际设定值。 在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。 2.程序的现场调试 完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,通常只需要修改程序就可能达到调整的目的。全部调试通过后,经过一段时间的考验,系统就可以投入实际的运行了。 本文来自: 中国物资采购网https://www.wendangku.net/doc/7c5290264.html, 详细出处参考:https://www.wendangku.net/doc/7c5290264.html,/newsinfo/2010-5-6/201056-11200321719338297.html PLC程序现场调试指在工业现场,甩有设备都安装好后,所有连接线都接好后的实际调试。也是PLC程序的最后调试。现场调试的目的是,调试通过后,可交给用户使用,或试运行。现场调试参与的人员较多,要组织好,要有调试大纲。依大纲,按部就班地一步步推进。开始调试时,设备可先不运转,甚至了不要带电。可随着调试的进展逐步加电、开机、加载,直到按额定条件运转。具体过程大体是: 1)、要查接线、核对地址。要逐点进行,要确保正确无误。可不带电核对,那就是查线,较麻烦。也可带电查,加上信号后,看电控系统的动作情况是否符合设计的目的。 2)、检查模拟量输入输出。看输入输出模块是否正确,工作是否正常。必要时,还可用标准仪器检查输入输出的精度。 3)、检查与测试指示灯。控制面板上如有指示灯,应先对应指示灯的显示进行检查。一方面,查看灯坏了没有,另一方面检查逻辑关系是否正确。指示灯是反映系统工作的一面镜子,先调好它,将对进一步调试提供方便。 4)、检查手动动作及手动控制逻辑关系。完成了以上调试,继而可进行手动动作及手动

调试程序DEBUG的练习一

汇编语言调试程序DEBUG的练习一 一、练习目的 1、学习使用DEBUG程序的各种命令。 2、利用DEBUG学习8086指令系统。 二、练习任务 1、参照说明,掌握DEBUG程序的各种命令,重点是命令R,D,A,U,T,P,G命令的使用。 用命令A汇编下列指令,判断指令正误并说明原因。 1).ROR AX,8;错误,因为ROR指令的源操作数只能是数字1或是CL。 2).LEA DI,[AX];错误,因为LEA指令的目的操作数不能是DI。 3).MOV DS,2010;错误,因为段寄存器和立即数不能在MOV指令间传。 4).PUSH AL;错误,因为PUSH指令的目的操作数只能是通用寄存器或是内存。 5).OUT 900,AL;错误,因为900已经超过了8位二进制数的范围。 6).MOV [BX],0;错误,因为内存和立即数之间的类型没有确定。 2、练习使用汇编命令 1)利用加法指令求3+5 2)利用乘法指令求3*5 3)利用算术运算指令求3的补码 4)学习使用逻辑运算指令。求5和17相与、相或的结果。 5)学习数据传送指令 三、设备 PC机一台 四、练习步骤 1、实现3加5:

2、实现3*5: 3、实现求3的补码:

4、实现5和17相与: 5、传送指令(独立练习) 1)用A命令在内存100H处键入下列内容: MOV AX,1234 MOV BX,5678 XCHG AX,BX MOV AH,35 MOV AL,48 MOV DX,75AB XCHG AX,DX 2)用U命令检查键入的程序并记录,特别注意左边的机器码。 3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。 说明: 下面所有操作均在DOS状态下进行。DEBUG.EXE是DOS操作系统提供的一个调试汇编语言程序的工具程序。其主要功能为: 1.可动态调试汇编语言程序;

任务5 程序调试与测试 - 习题答案

任务 5 程序调试与测试——调试猜数程序 习题答案 1. 列举出Python 的常见错误的类型,并举例简要说明各类错误的特点。 答案: 语法错误:语法是程序的结构及其背后的规则。语法错误在Python 解释器将源代码转换为字节代码时产生,说明程序的结构有一些错误。如果程序中存在语法错误,那么Python解释器会显示一条错误信息,然后停止运行程序。例如:省略了def 语句后面的冒号会产生类似Syntax Error: invalid syntax错误信息。在编程生涯的初期,我们可能会花大量时间追踪语法错误,但是随着经验的不断积累,我们在编程中的语法错误会越来越少,发现错误的速度也会更快。 运行时错误:之所以称之为运行时错误,是因为这类错误只有在程序开始运行后才会出现。这类错误也被称为异常 (exception),大多数运行时错误会包含诸如错误在哪里产生和正在执行哪个函数等信息。例如:无限递归最终会导致maximum recursion depth exceeded (超过递归最大深度)运行时错误。 语义错误:“语义”即与程序的意思的有关,语义错误有时候也称之为逻辑错误。如果程序中存在语义错误,程序在运行时不会产生错误信息,但是也不会返回预期的结果。例如:一个表达式可能因为没有按照预期的顺序执行,因此产生了错误的结果。严格来说,程序的运行状态是正常的,程序按照程序员的命令序列执行,程序没有错,错在编写程序的人。 2. 使用pdb模块对Python程序调试主要有哪几种用法? 答案: pdb可以在命令行中以脚本模式启动,也可以在交互解释器中使用pdb模块的函数启动调试器,还可以在程序中嵌入代码启动pdb。 (1)以脚本模式启动pdb 在命令行中,可以以脚本形式调用pdb,pdb将在文件的第一行代码之前暂停执行,以脚本形式调用的pdb执行单步调试。 (2)在交互式解释器中启动pdb 以脚本形式启动pdb在调试过程中比较烦琐,如需对文件进行修改、保存、执行等,在实际调试过程中人们经常利用Python便捷的交互式解释器来启动pdb进行调试。在交互式解释器中启动pdb调试,首先应当先使用import pdb语句导入pdb模块,然后利用pdb模块中的run、runeval和runcall等函数进行调试。 (3)在代码中嵌入pdb 在Python中,也可以将pdb模块中的set_trace函数直接编写在源码中,设置硬断点。 当程序执行到pdb.set_trace()时,就会进入到(Pdb)命令提示符状态,这时就可以执行pdb调试命令。直接在源码中执行pdb的好处是如果程序以为异常而无法继续执行下去,就可以用pdb.pm()回到异常执行的上一步,以便进行相关变量的查看。 3. pdb模块常用的调试命令有哪些,分别具有什么功能? 答案:

分享一年的程序调试经验

分享一年的程序调试经验 不知不觉已经出来工作一年,经过一年的工作,使 我学了不少东西,从而使我认识到以前很多不足之处, 也想把自己的程序调试经验跟大家分享下。 首先是软件的编写环境,选择一个编译平台对于编 写代码效率是至关重要的,在实际开发中,基本上使用Source Insight这个软件上编写和根改程序代码,本人 现在使用的的是Source Insight3.5,这个软件功能非常强大,可以帮你快速定位代码、查看代码变量使用及各 位置调用情况等信息。颜色管理也非常出色,根据颜色 可以判断各个信息,比如变量是否定义、是局部变量还 是全局变量等,可以说只要你使用过了就决不会再想在KEIL环境下编写代码了,当然程序很小有点感觉不出来,而对于程序量较大,且充分使用程序模块化,就是头文 件的使用,定位程序的速度可以达到想到哪里就定位到 哪里。熟悉后基本是使用各个快捷键进行操作,到那时KEIL就是当作一个编译器使用了。 KEIL建工程还是很有讲究的,假如代码比较大时,而工 程全部又放在同一个文件里,那这个文件里的东西就像 杂货间,找一个东西都难。如下建立一个工程简单keil 工程,这样建的工程,在keil设置相关的头文件调用路

径,清单与工程存放文件等设置后,整个工程的程序代 码就跟keil工程文件独立了,这样就对代码的移植及备份带来很大的方便,当然还有分得更细的工程了。这样 一来Source Insight工程里添加文件,SVN版本管理代 码就方便了。 变量及函数的定义在一个工程里命名习惯是非常重要的,做到看到函数或变量名就可以知道变量和函数的意义及 作用。我一般命令根据函数功能相关的关键字进行命名,而关键字与关键字之间用大小写区分,我英语也很差, 但语法可以不懂,但专业英语的单词还是要会使用的。 而变量定义能用结构体的尽量使用,比如时间就可以构 建一个时间结构体变量,里面包含年、月、日、时、分、秒、星期,这样定义了一个时间就非常容易操作而且直观。 程序的调试是写程序最重要的环节,好的调试方法可以快速完成程序调试。以前调试就是要在板上设置一盏灯,不然程序跑到哪里出了问题都不知道,所以以前没灯都 不知道怎么样去调试,但即使有灯调试,这样效率也是 很低的而且实际中也不太现实。使用串口打印信息来调 试程序,可以完全跟TUBRO C 2.0下的printf函数格式进行信息打印,如使用%d,%s、%f、%c打印各类型变量值,而这个功能函数就是debug.c和debug.h模块文件,

程序调试的技巧

一、程序调试的必要性 程序设计过程中,错误是在所难免的。虽然有些程序员认为一个程序可以做到完美无瑕,但实际情况却并非如此,不然就不会有人对Windows怨气冲天了。尽管信息学竞赛中所编的程序从来不会像Windows那样庞大,最多也是仅仅几百K而已,但由于时间有限,选手们的程序难免有疏漏之处。因此,调试就成了极其重要的一环。如何在紧迫的时间内快速准确地发现并改正错误,正是本文所要讨论的问题。 二、常见错误类型归纳 《孙子兵法》云:“知己知彼,百战不殆。”对于程序调试者来说,程序中的错误就好比是敌人,如能准确把握敌人的情况,无疑是极为有利的。下面我们就来对常见的一些错误类型进行归纳并给出解决方法。 1、思路错误 这要看是基本算法错误还是功能缺陷。前者需要重写大部分代码,是否重写则根据时间是否充裕而定,后者只需增加一部分代码,再修改某些地方,这时应全面考虑,以防遗漏应该修改的地方。 2、语法错误 这个没什么可说的,作为一名信息学竞赛的选手,应该对自己选择的编程语言的语法了如指掌,具体在这里就不多讲了。 3、书写错误 这种错误令人十分头痛,一般的书写错误在编译时都能找出来,但如

果你在表达式中用到变量j时误写成了i,不但编译程序找不出来,自己找时也由于两者样子比较相似,难以发现。排除这种错误只能靠“细心”两字,具体可使用下面要介绍的静态查错法。 4、输出格式错误 由于现在信息学竞赛采用黑箱测试法,由于输出格式错误而导致失分的例子屡见不鲜。一个标点,一个空格,都会导致最后的悔恨。因此,在调试时先要核对输出格式,针对不同输出格式多设计几个测试用例,以防一失足成千古恨。 5、其它编程时易犯的错误 除了上面所说的错误类型外,其它就属于编程时在细节上考虑不周所造成的了。下面仅列举其中一些较为隐蔽的错误。只有靠平时不断总结积累,才能真正的做到“知己知彼”。 ①变量未赋初值 看下面的程序段 For i:=1 to N Do If A>Max Then Max:=A; WriteLn(Max); 这个程序段的原意显然是要输出数组A中最大的数。但由于它遗漏了将Max赋初值的语句,因此很可能会出现输出的数并不在数组A中的错误。应该在过程开头添上一句Max:=-MaxInt;。养成变量使用前先赋初值的习惯能预防许多较隐蔽的错误。 ②中间运算越界

交通信号灯程序调试步骤

交通信号灯程序调试步 骤 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

交通信号灯调试 一、线路板的检测和调试 1.硬件调试 硬件调试是利用基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。其中硬件调试可分为静态调试与动态调试两步进行静态调试 静态调试是在用户系统未工作时的一种硬件检测。 第一步:目测: 检查外部的各种元件或者是电路是否有断点。 第二步:用万用表测试: 先用万用表测试目测中有疑问的连接点,再监测电源和地线是否正确、可靠连接已经他们之间是否有短路现象,发现问题后及时修改,以免通电试验后造成线路板和元器件的毁坏。 第三步:通电检测: 给焊接好的线路板通电,通电后先目测有无异常现象(冒烟,火花现象),然后用手背测试大功率器件和集成电路等有无温升,若出现以上现象,立即断电; 检测所有有插座的器件的电源和地是否符合要求; 在本项目中需要测试的有: U1-40=5V,U1-31=5V,U1-9=0V(S1没按下),U1-9=5V(S1按下),还有SB1—SB4 4个按键分别是按下时=0V,弹起时=5V;

利用导线分别把LED、蜂鸣器、数码管接到相应的低电平,测试线路和元器件是否正常工作。 动态调试 动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。 2软件调试 在本项目中,我们首先将教材《单片机应用技术》中的第二页的“信号灯的闪烁控制”的程序录入,并烧录到芯片中去,然后通电试验,这是合格的线路板的状态时所有发光二极管闪烁,按下复位按键S1,系统复位。 下面我详细介绍下程序录入、烧录的整个过程,在这个过程中需要一个编译软件和一个烧录器,在这儿我们的编译软件采用的是万利电子的“MedWin 中文版”烧录器采用的是致远电子“EasyPRO 80B”。 编写程序 双击桌面的“MedWin 中文版”图标,弹出对话框:

TurboC程序设计的基本步骤及如何编译、调试和运行源程序

Turbo C程序设计的基本步骤及如何编译、调试和运行源程序 本节主要介绍Turbo C程序设计的基本步骤及如何编译、调试和运行源程序。并给出Turbo C的常用编辑命令。最后介绍Turbo C编译、连接和运行时的常见错误。 一、Turbo C程序设计基本步骤 程序设计方法包括三个基本步骤: 第一步: 分析问题。 第二步: 画出程序的基本轮廓。 第三步: 实现该程序。 3a. 编写程序 3b. 测试和调试程序 3c. 提供数据打印结果 下面, 我们来说明每一步的具体细节。 第一步: 分析问题 在这一步, 你必须: a. 作为解决问题的一种方法, 确定要产生的数据(输出)。作为这一子步的一部分, 你应定义表示输出的变量。 b. 确定需产生输出的数据(称为输入), 作为这一子步的一部分, 你应定义表示输入的变量。 c. 研制一种算法, 从有限步的输入中获取输出。这种算法定义为结构化的顺序操作, 以便在有限步内解决问题。就数字问题而言, 这种算法包括获取输出的计算, 但对非数字问题来说, 这种算法包括许多文本和图象处理操作。 第二步: 画出程序的基本轮廓 在这一步, 你要用一些句子(伪代码)来画出程序的基本轮廓。每个句子对应一个简单的程序操作。对一个简单的程序来说, 通过列出程序顺序执行的动作, 便可直接产生伪代码。然而, 对复杂一些的程序来说, 则需要将大致过程有条理地进行组织。对此, 应使用自上而下的设计方法。 当使用自上而下的设计方法时, 你要把程序分割成几段来完成。列出每段要实现的任务, 程序的轮廓也就有了, 这称之为主模块。当一项任务列在主模块时, 仅用其名加以标识, 并未指出该任务将如何完成。这方面的内容留给程序设计的下一阶段来讨论。将程序分为几项任务只是对程序的初步设计。整个程序设计归结为下图所示的流程图1.。 ┏━━━━━━━━━━━━━━━┓ ┃主模块┃ ┏━━━━━━━┓┃输入数据┃ ┃主模块┃┃计算购房所需的金额┃ ┃┃┃计算装修所需的金额┃ ┃任务1 ┃┃计算总金额┃ ┃任务2 ┃┃输出计算结果┃

3.2程序调试的方法教案

3.2 程序调试的方法 浅色飞翔 一、教材分析 本节内容是广教版信息技术选修一《算法与程序设计》第三章第二节程序调试的方法。程序的调试贯穿了程序设计与实现的整个过程中,要在以后的章节中学会利用VB进行编程,必须从掌握程序的错误类型和调试方法开始,先学会程序的调试,然后将程序调试的技能贯穿于以后编程的各个章节中,不断地潜移默化,使学生养成良好的编程习惯,从点点滴滴开始积累程序调试方法和技巧。这对于提高学生自身的编程修养是大有裨益的。 二、学情分析 本节课是在高二年级实施。高二年级的学生逻辑思维能力较强,具备了初步程序设计、代码分析的能力;在学习本节内容之前,学生已完成本模块中VB程序设计语言基础知识的学习,能编写一些简单的程序。学生对利用编程解决问题兴趣较高。但是,个别学生在小组协作学习时依赖性较强,另外,对选择适当的语句编写程序还要进一步的学习。 三、教学目标 1、知识与技能 1)掌握程序调试的意义 2)体验程序错误的类型,并分析其原因 3)体验程序调试与排错的基本方法 2、过程与方法 通过调试不同的例程,掌握程序错误的四种类型和原因及程序调试与排错的方法,认识程序调试的重要性。 3、情感态度与价值观 1)关注程序调试和排错的方法,并在程序设计中自觉加以运用。 2)培养调试程序的技巧、耐心和毅力,树立运用计算机解决问题的思想。 四、教学重、难点 重点:程序错误的四种类型,掌握调试与排错的方法。

难点:程序的调试与排错及其技巧。 五、课时安排 1课时 六、教学方法讲解法任务驱动自主探究 七、教学过程

八、板书设计 九、教学反思 本节课是广教版信息技术选修一《算法与程序设计》第三章第二节的内容,主要讲解了两方面的内容:程序错误的类型、程序调试与排错的方法。通过教学过程中存在的问题以及评课老师给予的建议,我总结了以下几点需要改进的地方: 1、设计的三个活动环节,其中第一个活动没按预想的引起学生极大的兴趣, 其余两个活动,大部分学生完成的还可以。因此,在课前引入方面有待提高。 2、教学过程中,出现了语言表达不流畅的问题,主要表现为口头语“那么” 出现的次数太多,同时,在讲解错误类型的概念时,语言不够顺畅。 3、整堂课氛围不是很活跃,课堂调控上把握的还不到位,课堂调控能力有 待提高。 4、教学目标基本完成,最后学生的情感态度价值观方面还未达到预期效果。 5、教师要给学生一碗水,最起码自己要有一桶水。从备课到讲课,深感在 专业水平上要继续努力,深钻深研,将内容吃透,才能给学生深入浅出的讲透。 通过此次录课,深感讲好一节课不是件容易的事情,需要有深厚的专业知识及教学能力,同时,还要具备良好的心理素质。 本次录课,特别感谢信息技术组各位指导老师和同事的悉心帮助,在他们的指导和帮助下,短短的时间内,我才得以完成录课,并且在授课方面取得了很大的进步。特此感谢!

实验三parfor程序调试

实验三parfor程序的调试 一、实验目的 1.熟悉parfor程序的编写。 2.使用profiler工具分析并行程序的性能。 3.完成课堂练习。 二、实验课时:4课时 三、实验原理 第一部分:Matlab的parfor的基本使用 Parfor适用于: 1、大量的简单计算的循环; 2、大量或少量的复杂计算的循环。 不建议在少量的简单计算的循环中使用parfor,因为它本身也有计算的损耗。 首先,parfor的语法和普通的for语法的区别

图1 for和parfor语法结构 for 语句是按照i的序列顺序执行的,而parfor是由多个worker同时执行i为不同值的结果,如下图2图3所示: 图2 for语句运行结果 第二部分:并行程序的调试与分析 在matlab并行程序中,matlab提供了专门调试的并行工具profiler,利用并行profiler可以调试最常见的paralleled job包括SPMD并行结

构和paralleled job结构。 并行profiler工具是profile命令和profile viewer的扩展,可以帮助用户分析Matlab并行程序的性能。 1、查看mpiprofile状态: 启动matlab并行任务后,采用mpiprofile查看运行状态如下:

2、启动和关闭matlab并行程序分析器 采用mpiprofile on启动并行profile功能,此时并行profile开始记录程序执行数据。同样,采用mpiprofile off关闭此功能,此时并行profile停止记录程序执行数据。 3、采用mpiprofile viewer启动并行profile查看功能

程序调试与常见程序错误汇总

程序调试与常见程序错误 目录 一、在Codeblocks中调试程序 (1) 二、存储路径设置问题 (4) 三、修改Codeblocks的设置 (4) 四、提示程序无法调试问题 (6) 五、常见错误分析 (6) 六、程序出错的三种情况 (18) 七、常用的纠错方式 (19) 一、在Codeblocks中调试程序 1.注意事项 不允许工程路径中含有空格、汉字。 2.在相应行号后面点击鼠标左键设置断点 3.打开W ATCHS窗口

4.点击调试按钮 5.可以再watchs窗口看到自动变量。黄色三角表示程序暂停的位置

6.通过单步运行按钮进行单步运行。 7.也可以在debuger标签,command栏输入调试命令进行单步运行、打印变量值等操作。 8.程序运行

二、存储路径设置问题 1. 如果不是默认安装路径,code blocks 就无法找到编译器和调试器,就会出现此类问题。 解决办法:Settings——Compiler and debugger——Toolchain executables——Auto-detect。 2. 输出信息为“某个命令执行失败或异常终止”。 解决方法:通常是相应的编译器找不到,试着将其所在路径放到path环境变量中去。 3. 输出编译错误,如某某文件找不到之类。 解决方法:在项目中设置选项中加上路径(通常可利用customer variable项)。 4. 在调试程序的时候弹出类似""XYZ - Debug": The compiler's setup (GNU GCC Compiler) is invalid, so Code::Blocks cannot find/run the compiler. Probably the toolchain path within the compiler options is not setup correctly?! Goto "Settings->Compiler and debugger...->Global compiler settings->GNU GCC Compiler->Toolchain executables" and fix the compiler's setup. Skipping... Nothing to be done (all items are up-to-date)."这种警告。 解决方法:这个错误提示已经说得很清楚了, 找不到编译器, 到菜单Settings->Compiler and debugger...->Global compiler settings->GNU GCC Compiler->Toolchain executables下去修复编译选项前提是你已经装了gcc 如过没装, 就去下个包含mingw的codeblocks, (mingw包含gcc编译器); 三、修改Codeblocks的设置 1.

汇编语言程序上机调试

2.1 汇编语言程序上机调试 汇编语言的学习离不开上机实验。汇编语言程序上机操作包括四个步骤:编辑、汇编、连接、调试运行4个过程,如图错误!文档中没有指定样式的文字。-1所示。 图错误!文档中没有指定样式的文字。-1 汇编语言程序上机调试过程 常用的汇编器有MASM(Marco Assembler,宏汇编)和TASM(Turbo Assembler),连接器有LINK和TLINK,调试器有DEBUG和TD(Turbo Debugger)。MASM、LINK和DEBUG 由Microsoft 公司出品, TASM、TLINK和TD由Borland公司出品。本书以Microsoft公司的汇编工具包为例,介绍汇编语言程序的上机调试过程。 注:在学习本节内容时,将重点放在程序调试过程和方法上,暂时不需要去探求实例的程序代码及各条指令的含义。相关内容在后续章节会详细介绍。 2.1.1简单汇编语言源程序 下面先看一个完整的简单汇编语言源程序。 【例错误!文档中没有指定样式的文字。-1】在屏幕上显示字符串“Hello,Assembly!”。 ;源程序:ex201.asm ;功能:在屏幕上显示字符串“Hello,Assembly!” DSEG SEGMENT ;数据段开始 STRING DB 0DH,0AH,'Hello,Assembly!',0DH,0AH,'$' DSEG ENDS ;数据段结束 CSEG SEGMENT ; 代码段开始 ASSUME CS:CSEG,DS:DSEG ;设定段寄存器与逻辑段的关系 START: MOV AX,DSEG MOV DS,AX ; 设置数据段段地址 MOV DX,OFFSET STRING ;为DOS功能调用设置入口参数 MOV AH,9 ;为DOS功能调用设置功能号 INT 21H ;DOS功能调用,显示字符串 MOV AX,4C00H ;为DOS功能调用设置功能号和入口参数

5 单片机系统的调试

5 系统的调试 系统调试包括硬件调试和软件调试。硬件调试的任务是排除系统的硬件电路故障,包括设计性错误和工艺性故障。软件调试是利用开发工具进行在线仿真调试,除发现和解决程序错误和工艺性故障。软件调试是利用开发工具进行在线仿真调试,除发现和解决程序错误外,也可以发现硬件故障。 5.1硬件调试 单片机应用系统的硬件调试和软件调试是分不开的,许多硬件故障是在调试软件时发现的,但通常是先排除系统中明显的硬件故障后,在和软件结合起来调试。 (1)常见的硬件故障 逻辑错误。样机硬件的逻辑错误是由于设计错误或加工过程中的工艺性错误所造成的,包括错线、开路和短路等几种,其中短路是最常见的故障。 元器件失效。元器件失效的原因有两个方面:一是器件本身已经损坏或性能不符合要求;二是由于组装错误造成元器件失效,如电解电容、二极管的极性错误或集成块安装方向错误等。 可靠性差。引起系统不可靠的因数很多,如接插件接触不良会造成系统时好时坏,内部和外部的干扰、电源纹波系数过大或器件负载过大等造成逻辑电平不稳定,另外走线和布局不合理等也会引起系统的可靠差。 电源故障。若样机中存在电源故障,则加电后将造成器件损坏。电源故障包括电压值不符合设计要求、电源引出线和插座不对应、电源功率不足和负载能力差等。 (2)硬件调试方法 脱机调试。脱机调试是在样机加电之前,先用万用表等工具,根据硬件电气原理图和装配图,仔细检查样机线路的正确性,并核对元器件的符号、规格和安装是否符合要求。特别注意电源的走线,防止电源之间的短路和极性错误。重点检查系统的总线或其他信号线之间是否存在相互的短路。样机所用的电源,事先必须单独调试后才能加到系统中。在不插芯片的情况下,加电检查各插件上引脚的电位,仔细测量各点电位是否正常,尤其应注意单片机插座上的各点电位是否

windows程序调试

调试方法和技巧 便于调试的代码风格: 不用全局变量 所有变量都要初始化,成员变量在构造函数中初始化 尽量使用const 详尽的注释 VC++编译选项: 总是使用/W4警告级别 在调试版本里总是使用/GZ编译选项,用来发现在Release版本中才有的错误 没有警告的编译:保证在编译后没有任何警告,但是在消除警告前要进行仔细检查 调试方法: 1、使用Assert(原则:尽量简单) assert只在debug下生效,release下不会被编译。 例子: char* strcpy(char* dest,char* source)

assert(source!=0); assert(dest!=0); char* returnstring = dest; while((*dest++ = *source++)!= …\0?) { ; } return returnstring; } 2、防御性的编程 例子:char* strcpy(char* dest,char* source) { if(source == 0) { assert(false); reutrn 0; } if(dest == 0)

assert(false); return 0; } char* returnstring = dest; while((*dest++ = *source++)!= …\0?) { ; } return returnstring; } 3、使用Trace 以下的例子只能在debug中显示, 例子: a)、TRACECString csTest =“test”;TRACE(“CString is %s\n”,csTest); b)、A TL TRACE c)、afxDump

相关文档