C Free 5程序调试方法

C Free 5程序调试方法
C Free 5程序调试方法

C Free 5.0 程序的单步调试

创建一份新的代码文件

可直接点击“文件”下的白色图标,或点击“文件”选择“新建”,或按快捷键“Ctrl + N”(C Free 5.0默认情况下新建的代码文件为.cpp 格式,可在“工具”、“环境选项”、“新建文件类型”中更改,C语言标准格式为.c 格式)

基于实例的C程序调试介绍

一、查看变量的内容

# include

int main(int argc, char* argv[])

{

int i;

int sum;

sum=0;

for(i=1;i<=10;i++)

sum=sum+i;

printf("sum=%d",sum);

return 0;

}

第一步,打开C Free 5.0,输入上面的代码。

第二步,把光标移到“sum=0;”这一行,按F10

它的作

用是设

一个断

点,程序

运行到

这里时,

会停下

来。也就

是说,接

下来,程

序必须

通过按

F7键单

步运行

了。

第三步:

按F9

(开始调试)

我们发现有一箭头停留在这句语句上,它指示程序停留的位置,而箭头所在的语句(“sum=0;”)还没有执行。事实上,我们可以通过看一下内存变量sum的内容来验证。方法是这样的:

打开“调试”下的“监视”,或者按快捷键“Alt + 3”。

在“监视”的空白处点击鼠标右键,选择“添加监视”。

输入需要监视的变量名,这里输入为sum

这时我们可以在监视窗口中看到sum的内容不为0,而是一个随机的值。

第四步,我们按一下F7(进入),我们发现sum的内容变为0了。这说明“sum=0;”这句语句被执行了。

我们还可以用同样的方法看一下i的内容。

只需要鼠标点

第六步,一步一步地按F7,我们可以发现在单步执行for循环语句的时候i和sum的内容在不断变化。当退出循环时,我们发现i的内容为11(因为变量i的内容为11,i<=10这个条件不满足,所以程序退出循环)。

附带提一下,当程序已经执行了“sum=0;”这一句语句后,如果我们直接把光标移到“printf("sum=%d",sum);”,然后按Ctrl+ F8,我们可以直接把上面的for循环都执行了,而不必一步一步地按F7。在实践中,为了查找程序的逻辑错误,我们往往要单步运行该程序好几遍。如果已经通过单步调试验证某一段语句(如一个for循环语句或者几个用户定义的函数)正确了,我们就可以用Ctrl+ F8跳过这段语句,直接运行到还未测试的语句。二、F7(进入)和F8(跳过)的区别

# include

int add(int m,int n)

{

int s;

s=m+n;

return s;

}

int main(int argc, char* argv[])

{

int i=1;

int j=2;

keil软件调试单片机程序

先说一个概念:调试,在企业程序设计里(我把企业商务类型的软件开发叫企业程序设计,把单片机与驱动程序这样接触底层汇编与硬件相关的程序设计叫底层程序设计),调试一般都用来跟踪变量的赋值过程,以及查看内存堆栈的内容,查看这些内容的目的在于观察变量的赋值过程与赋值情况从而达到调试的目的。由于企业程序的宿主就是开发它的计算机本身,因此企业程序设计比起底层程序设计,特别是单片机的程序设计调试来的更直观,调试也更方便。 单片机的程序设计调试分为两种,一种是使用软件模拟调试,意思就是用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片是由操作系统本身完成的,无法得到控制,这样就无法时时的模拟单片机的执行时序,也就是说,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往要完成的比单片机慢)。为了解决软件调试的问题,第二种是硬件调试,硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中(这个设备叫仿真器),仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。同时,仿真器也会返回单片机内部内存与时序等情况给计算机的辅助软件,这样就可以在软件里看到真实的执行情况。不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。 图1:仿真器 总结一下两者的不同与相同: 相同点: 1:都可以检测单片机执行时序下的片内资源情况(如R0-R7 、PC计数器等) 2:可以实现断点、全速、单步、运行到光标等常规调试手段。 不同:

C程序调试步骤to初学者

调试程序一般应经过以下几个步骤: 1、先进行人工检查,即静态检查。 在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多数错误。而这一步骤往往容易被人忽视。有人总希望把一切推给计算机系统去做,但这样就会多占用机器时间,作为一个程序人员应当养成严谨的科学作风,每一步都要严格把关,不把问题留给后面的程序。 为了更有效地进行人工检查,所编的程序应注意力求做到以下几点: (1)应当采用结构化程序方法编程,以增加可读性;(2)尽可能多加注释,以帮助理解每段程序的作用;(3)在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。这样既易于阅读也便于调试,各函数之间除用参数传递数据这一渠道以外,数据间尽量少出现耦合关系,便于分别检查和处理。 2、在人工检查无误后,才可以上机调试。通过上机发现错误称动态检查。在编译时给出语法错误的信息,可以根据提示的信息具体找出程序中出错之处并改正之。 应当注意的是有时提示的出错并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多各种错误互有关联,因止要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。如果系统提示的出错信息多,应当从上到下一一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一二个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;有的是少了“}”或多了“}”有的是书写语句时忘记写“;”或是全角的“;”了,只要加上一个变量定义,或填加“};”就所有错误都消除了。 3、在改正语法错误后,程序经过连接就得到可执行的目标程序。运行程序,输入程序所需数据,就可得到运行结果。应当对运行结果作分析,看它是否符合要求。 有的初学者看到运行结果就认为没问题了,不作认真分析,这是危险的。 有时,数据比较复杂,难以立即判断结果是否正确。可以事先考虑好一批“试验数据”,输入这些数据可以得出容易判断正确与否的结果。可以在计算的输出结果的程序地方加入一段输出到屏幕窗口的程序,利用屏幕窗口可以方便看到结果的,很直观。例如,if语句有两个分支,有可能在流程经过其中一个分支时结果正确,而经过其它一个分支时结果不对等。必须考虑周全。 事实上,当程序复杂时很难把所有的可能方案全部都试到,选择典型的情况作试验即可。 4、运行结果不对,大多属于逻辑错误。对这类错误往往需要仔细检查和分析才能发现。可以采用以下办法: (1)将程序与流程图仔细对照,如果流程图是正确的话,程序写错了,是很容易发现的。例如,复合语句忘记写花括弧,只要一对照流程图就能很快发现。 (2)如果实在找不到错误,可以采用“分段检查”的方法。在程序不同的位置设几个printf 函数语句,输出有关变量的值,往下检查。直到找到在哪一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就可能发现错误所在。 (3)也可以用“条件编译”命令进行程序调试(在程序调试阶段,若干printf函数语句就要进行编译并执行。当调试完毕,这些语句不要再编译了,也不再被执行了)。这种方法可以不必一一去printf函数语句,以提高效率。 5、如果在程序中没有发现问题,就要检查流程图有无错误,即算法有无问题,如有则改正

软件调试技巧

软件调试技巧 一、软件调试方法 软件调试有很多种方法。常用的有4种,即强行排错法、回溯排错法、归纳排错法和演绎排错法。 1.强行排错法 这种方法需要动脑筋动的地方比较少,因此叫强行排错。通常有以下3种表现形式: ●打印内存变量的值。在执行程序时,通过打印内存变量的数值,将该数值同预期的数值进行比较,判 断程序是否执行出错。对于小程序,这种方法很有效。但程序较大时,由于数据量大,逻辑关系复杂,效果较差。 ●在程序关键分支处设置断点,如弹出提示框。这种方法对于弄清多分支程序的流向很有帮助,可以很 快锁定程序出错发生的大概位置范围。 ●使用编程软件的调试工具。通常编程软件的IDE集成开发环境都有调试功能,使用最多的就是单步调 试功能。它可以一步一步地跟踪程序的执行流程,以便发现错误所在。 2.回溯排错法 这是在小程序中常用的一种有效的调试方法。一旦发现了错误,可以先分析错误现象,确定最先发现该错误的位置。然后,人工沿程序的控制流程,追踪源程序代码,直到找到错误根源或确定错误产生的范围。 3.归纳排错法 归纳法是一种从特殊推断一般的系统化思考方法。归纳法调试的基本思想是,从一些线索(错误的现象)着手,通过分析它们之间的关系来找出错误,为此可能需要列出一系列相关的输入,然后看哪些输入数据的运行结果是正确的,哪些输入数据的运行结果有错误,然后加以分析、归纳,最终得出错误原因。 4.演绎排错法 演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。调试时,首先根据错误现象,设想及枚举出所有可能出错的原因作为假设。然后再使用相关数据进行测试,从中逐个排除不可能正确的假设。最后,再用测试数据验证余下的假设是否是出错的原因。 二、调试的原则 调试能否成功一方面在于方法,另一方面很大程度上取决于个人的经验。但在调试时,通常应该遵循以下一些原则。 1.确定错误的性质和位置的原则 用头脑去分析思考与错误征兆有关的信息,避开死胡同。调试工具只是一种辅助手段。利用调试工具可以帮助思考,但不能代替思考。通常避免使用试探法,最多只能将它当作最后的手段,毕竟小概率事件有时也会发生。 2.修改错误的原则 在出现错误的地方,很可能还有别的错误。修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没有修改错误本身。当新修正一个错误的同时又引入新的错误。 三、有效减少调试时间 1.绘制程序流程图 一些程序员认为,绘制程序流程图是件繁琐的事,而且浪费时间。其实不然,当读者对着偌大的程序一筹莫展时,面对纷纭复杂的关系理不出头绪时,使用程序流程图绝对可以事半功倍。 因此建议在编制程序前先绘制流程图,这样编程的思路有条理,调试时同样会有条不紊。若编制程序之前没有绘制流程图,当排错没有进展时,可以马上编写流程图。你会发现,程序中某些分支或细节被忽略了,这些细节可能就是程序出错的地方。 2.不要过多地依赖单步调试 有些程序对时间很敏感。数据只在那么一瞬间有效,可谓稍纵即逝。所以等到单步执行到那里时,

实验一-Keil软件的使用及简单程序的调试方法

实验一Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下:

几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示

单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。 (3)将文件添加到工程中 单击“T arget 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。

数控车床基本操作简单程序调试

数控车床的基本操作与简单程序调试 一、实训目的 < 1 >掌握数控车削加工基本编程指令及其应用 < 2 >熟悉了解数控车床的操作面板和控制软件; < 3 >掌握数控车床的基本操作方法和步骤; < 4 >进一步了解数控车床的结构组成、加工控制原理; < 5 >熟练掌握精车程序的输入调 二、预习要求 认真阅读数控车床组成、位置调整和坐标系设定及基本编程指令与调试的章节内容。 三、实训理论基础 1.基本编程指令功能介绍 1 ). G 功能 ( 格式: G 2 G 后可跟 2 位数 ) 常用 G 功能指令 (1) 、表内 00 组为非模态指令,只在本程序段内有效。其它组为模态指令,一次指定后持续有效,直到被本组其它代码所取代。 (2) 、标有 * 的 G 代码为数控系统通电启动后的默认状态。

2 ). M 功能 ( 格式: M2 M 后可跟 2 位数 ) 车削中常用的 M 功能指令有: M00-- 进给暂停 M01-- 条件暂停 M02-- 程序结束 M03-- 主轴正转 M04-- 主轴反转 M05-- 主轴停转 M98-- 子程序调用 M99-- 子程序返回。 M08-- 开切削液 M09-- 关切削液 M30-- 程序结束并返回到开始处 3 ). T 功能 ( 格式: T2 或 T 4 ) 有的机床 T 后只允许跟 2 位数字,即只表示刀具号,刀具补偿则由其它指令。 有的机床 T 后则允许跟 4 位数字,前 2 位表示刀具号,后 2 位表示刀具补偿号。如: T0211 表示用第二把刀具,其刀具偏置及补偿量等数据在第 11 号地址中。 4 ). S 功能 ( 格式: S4 S 后可跟 4 位数 ) 用于控制带动工件旋转的主轴的转速。实际加工时,还受到机床面板上的主轴速度修调倍率开关的影响。按公式: N=1000Vc / p D 可根据某材料查得切削速度 Vc ,然后即可求得 N. 例如:若要求车直径为 60mm 的外圆时切削速度控制到 48mm/min ,则换算得: N=250 rpm ( 转 / 分钟 ) 则在程序中指令 S250; 5 ).车床的编程方式 ( 1 ).绝对编程方式和增量编程方式。 图 2-1 编程方式示例 绝对编程是指程序段中的坐标点值均是相对于坐标原点来计量的,常用 G90 来指定。增量( 相对 ) 编程是指程序段中的坐标点值均是相对于起点来计量的。常用 G91 来指定。如对图 2-1 所示的直线段 AB 编程 绝对编程: G90 G01 X100.0 Z50.0; 增量编程: G91 G01 X60.0 Z-100.0;

PLC程序现场调试的方法

P L C程序现场调试的方 法 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

PLC程序现场调试的方法——【非常重要】 02-04 16:42更新林慧玲分类:围观:625人次微信二维码 1、要查接线、核对地址 要逐点进行,要确保正确无误。可不带电核对,那就是查线,较麻烦。也可带电查,加上信号后,看电控系统的动作情况是否符合设计的目的。 2、检查模拟量输入输出 看输入输出模块是否正确,工作是否正常。必要时,还可用标准仪器检查输入输出的精度。 3、检查与测试指示灯 控制面板上如有指示灯,应先对应指示灯的显示进行检查。一方面,查看灯坏了没有,另一方面检查逻辑关系是否正确。指示灯是反映系统工作的一面镜子,先调好它,将对进一步调试提供方便。 4、检查手动动作及手动控制逻辑关系 完成了以上调试,继而可进行手动动作及手动控制逻辑关系调试。要查看各个手动控制的输出点,是否有相应的输出以及与输出对应的动作,然后再看,各个手动控制是否能够实现。如有问题,立即解决。 5、半自动工作 如系统可自动工作,那先调半自动工作能否实现。调试时可一步步推进。直至完成整个控制周期。哪个步骤或环节出现问题,就着手解决哪个步骤或环节的问题。 6、自动工作 在完成半自动调试后,可进一步调试自动工作。要多观察几个工作循环,以确保系统能正确无误地连续工作。 7、模拟量调试、参数确定 以上调试的都是逻辑控制的项目。这是系统调试时,首先要调通的。这些调试基本完成后,可着手调试模拟量、脉冲量控制。最主要的是选定合适控制参数。一般讲,这个过程是比较长的。要耐心调,参数也要作多种选择,再从中

Keil软件及其调试功能简介

Keil软件及其调试功能简介 目前流行的51系列单片机开发软件是德国Keil公司推出的Keil C51软件,它是一个基于32位Windows环境的应用程序,支持C 语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:μVision IDE集成开发环境(包括工程管理器①、源程序编辑器②、程序调试器③,见图2)、C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及Monitor-51、RTX51实时操作系统。 应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存—建立工程并添加源文件—设置工程—编译/汇编、连接,产生目标文件—程序调试。Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单File-New…,在源程序编辑器中输入汇编语言或C语言源程序(或选择File-O pen…,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单Project-New Project…,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group ‘Source Group1’”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project-Option for Target‘Target1’(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。 成功编译/汇编、连接后,选择菜单Debug-Start/Stop Debug Session(或按Ctrl+F5键)进入程序调试状态,Keil提供对程序的模拟调试功能,内建一个功能强大的仿真CPU以模拟执行程序。Keil能以单步执行(按F11或选择Debug-Step)、过程单步执行(按F10或选择Debug-Step Over)、全速执行等多种运行方式进行程序调试。如果发现程序有错,可采用在线汇编功能对程序进行在线修改(Debug-Inline Assambly…),不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理(Debug-Insert/Remove Breakpoint或Debug-Breakpoints…等)。在模拟调试程序后,还须通过编程器将.hex目标文件烧写入单片机中才能观察目标样机真实的运行状况。 Keil软件Eval版(免费产品)的功能与商业版相同,只是程序的最大代码量不得超过2kB,但对初学者而言已是足够。Keil软件由于其

keil调试经验

KEIL调试高级技巧 在调试状态,Debug 菜单项中的命令可以使用了,有关编译的工具栏按钮消失了,出现了一个用于运行和调试的工具栏,Debug 菜单上的大部份命令都有相应的快捷按钮。 从左到右依次是复位、运行、暂停、单步跟踪、单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮命令; 然后按一下图示第二个“运行”按钮。连接上相关的实验资源,本实验用一条 8PIN的数据排线把实验仪的CPU部份的P1口(JP44)连接到八路指示灯部份的JP32。这时你会看到实验仪的八个红色LED,轮流点亮,表示运行成功,也可以查看相关的变量和参数,非常方便。 ⒈单步跟踪运行 使用菜单Debug->Step 或上图第四个单步运行按钮或使用快捷键 F11 可以单 步跟踪执行程序,在这里我们按下 F11 键,即可执行该箭头所指程序行,每按一次 F11,可以看到源程序窗口的左边黄色调试箭头指向下一行,如果程序中有Delay延时子程序,则会进入延时程序中运行。 ⒉单步运行 如果Delay 程序有错误,可以通过单步跟踪执行来查找错误,但是如果 Delay 程序已正确,每次进行程序调试都要反复执行这些程序行,会使得调试效率很低,为此,可以在调试时使用 F10 来替代 F11(也可使用菜单 Step Over 或相应的命令按钮),在 main 函数中执行到 Delay时将该行作为一条语句快速执行完

毕。为了更好的进行对比,我们重新进入仿真环境,将反汇编窗口关闭,不断按F10 键,可以看到在源程序窗口中的左边黄色调试箭头不会进入到延时子程序。 ⒊全速运行 点击工具栏上的“运行”按钮或按F5 键启动全速运行,全速执行程序,此时用户板上的 P1 口所接 LED 以流水灯状态显示。 ⒋暂停 点击工具栏上的按钮,此时用户板上的P1 口所接 LED 停止以流水灯状态显示,只有一个 LED 灯点亮(取决于暂停前的 P1 的值)。 ⒌观察/修改寄存器的值 Project 窗口在进入调试状态后显示 Regs 页的内容,包括工作寄存器 R0~R7 的内容和累加器 A、寄存器 B、堆栈指针 SP 的内容。 用户除了可以观察以外还可自行修改,例如将寄存器a 的值 0x62 改为 0x85。方法一:用鼠标点击选中单元a,然后再单击其数值位置,出现文字框后输入0x85 按回车键即可; 方法二:在命令行窗口,输入A=0x85,按回车键将把 A 的数值设置为 0x85

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

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

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入debug.print 变量 这样可以比较好地找到问题 二,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帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。 方法三:逐语句检查(顺序、语义) 主要检查每一句代码的顺序是否写对,语义是否正确。 把整个代码从头至尾地读一边,仔细思索每一段子过程什么时候执行,以及每一子过程中的每一句代码什么时候发生,必要时可以在程序段中插入Print语句分段查看;也可用注释语

怎么样在KEIL_C软件中调试程序

首先建立工程。选[Project\New Project],选择工程保存的路径,及为工程命名。例如将其存放在D:\新建文件夹(2),命名为123。输入完工程名后会打开一个如下图所示的对话框,在这里我们选择CPU的型号,根据我们选用的CPU芯片的不同,这里的设置不同。在这里我们选用 Atmel\AT89C51。 接下来弹出一个如下图的对话框。该对话框提示你是否要把标准8051的启动代码添加到工程中去。如用C语言写程序,一般选“否”,但是,如果用到了某些增强功能需要初始化配置时,则可选“是”。在这里,我们选“否”,即不添加启动代码。 新建文件。在[File\New]建一个文件,将程序写入。这里以一个00-99秒计时器程序为例。程序如下 #include unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90}; //共阳数码管段0-9 unsigned char Second; delay10ms() //延时10毫秒 { unsigned int i,j; for(i=0;i<10;i++) for(j=0;j<120;j++); } leds() //显示子函数 { P0_0=0; //选通P0_0数码管 P2=table[Second/10]; //送段值 delay10ms(); //延时 P2=0xff; //消影 P0_0=1; //消除P0_0选通状态 P0_1=0; //选通P0_0数码管 P2=table[Second%10]; //送段值 delay10ms(); //延时 P2=0xff; //消影 P0_1=1; //消除P0_0选通状态 } void delay1s(void) //延时1秒 { unsigned char j; for(j=50;j>0;j--) leds(); } void main(void) { Second=0; //显示置0 while(1) //主循环 { delay1s();// 延时 Second++; //自加 if(Second==60) //判断是否到60

调试程序的简单说明.

难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。 我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下: VC 调试篇 设置 为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard 创建的工程中包含的Debug Configuration 自动包含调试信息,但是是不是Debug 版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration 中增加调试信息,包括Release 版本。 为了增加调试信息,可以按照下述步骤进行: ? 打开Project settings 对话框(可以通过快捷键ALT+F7打开,也可以通过IDE 菜单Project/Settings 打开 ?选择C/C++页,Category 中选择general ,则出现一个Debug Info 下拉列表框,可供选择的调试信息方式包括: 命令行 Project settings 说明 无 None 没有调试信息 /Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息

/Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等 /Zi Program Database 创建一个程序库(PDB,包括类型信息和符号调试信息。 /ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使 #pragma 设置的优化功能无效 ? 选择Link 页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL ?如果C/C++页中设置了Program Database 以上的选项,则Link incrementally 可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译,而不必每次都从头开始编译。调试方法: 1、使用 Assert(原则:尽量简单assert只在debug下生效,release下不会被编译。 2、防御性的编程 3、使用Trace 4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因 5、把错误信息记录到文件中 位置断点(Location Breakpoint 大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码:

3-2节 程序调试的方法

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

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

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

keil c 的在线调试与断点设置

Keil 的调试命令、在线汇编与断点设置 上一讲中我们学习了如何建立工程、汇编、连接工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节,这一讲将介绍常用的调试命令、利用在线汇编、各种设置断点进行程序调试的方法,并通过实例介绍这些方法的使用。 一、常用调试命令 在对工程成功地进行汇编、连接以后,按Ctrl+F5 或者使用菜单 Debug->Start/Stop Debug Session 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功能强大,可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试功能。不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的,其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。 进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1 所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。 接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该 段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难 以确认错误出现在哪些程序行。单步执行是每次执行一行程序,执行完该行 程序以后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完 以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以 找到程序中问题所在。程序调试中,这两种运行方式都要用到。 使用菜单STEP 或相应的命令按钮或使用快捷键F11 可以单步执行程序, 使用菜单STEP OVER 或功能键F10 可以以过程单步形式执行命令,所谓 过程单步,是指将汇编语言中的子程序或高级语言中的函数作为一个语句来

PLC程序调试方法及步骤

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

程序调试步骤

一、认识调试功能 在组建(build)菜单中,点击开始调试(start debug),在其下级子菜单中,包含了启动调试器运行的各项子命令(如图1所示) 图1 开始调试菜单 各子命令及其功能如下: ?Go:从程序中的当前语句开始执行,直到遇到断点(后面讲)或遇到程序结束。 ?Step Into:控制程序单步执行,并在遇到函数调用时进入函数内部。 ?Run to Cursor:在调试运行程序时,使程序运行到当前光标所在位置时停止,相当于设置了一个临时断点。 二、单步调试代码 利用图1菜单中的Step into功能或按F11键,进入单步调试状态,有一个箭头指向程序的第一行,每按一次F11键,程序再向前执行一行语句,如图2所示。

图2 开始调试后的界面 我们对图2的界面进行观察。 首先,菜单中增加一个调试(debug)菜单,如图中①处,下面是菜单中的部分功能(鼠标浮到上面时,会有提示,请试一试。) ?Step Into(F11):单步调试程序,遇到调用函数时,进入函数内部逐步执行; ?Step Over(F10):也是单步调试程序,遇到调用函数时,并不进入函数内容执行; ?Step Out:调试程序时,从正在执行的某个嵌套结构的内部跳到该结构的外部,常用于知道调用函数中不存在错误的情况; ?Run to Cursor(CTRL-F10):调试程序时,直接运行到插入点处。 其次,和当前正在执行的语句相关的变量,以及其当前的值显示在了②处。 再次,黄色箭头代表了正在执行的位置。 【练习1】 下面,针对求1+2+3+...+100的程序,体验单步执行。步骤: (1)编写如图所示求1+2+3+...+100的程序,排除编译错误; (2)按前述开始单步执行,用“Step Into(F11)”持续执行,在执行过程中,注意观察变量的变化。 ?调试中,要将自己的预期和计算机执行的结果进行比较,当发现不一致,恭喜,问题找到了。

程序调试方法

程序调试方法 李应洪2005-8-12 一、CommConstants.java文件的写法,里面注意按模块写。‘是’和‘否’用‘1’、‘0’ 二、Tomcat无法启动,先查看log,也行是java文件未完全编译,也有可能是web.xml或者Config.xml 文件配置问题。 三、Java程序 1.在发生异常的时候,我们是先尽快定位到关键的地方,如找不到,先不要急于每个方法里面 去单步跟踪Step into,而是先在几个自认为可能出错的程序段上Step over,肯定会找出是某 个段出现问题,然后在逐渐细化。 2.调试主要看一下几个关键点:设置断点Breakpoints,查看变量Variables,添加表达式 Expressions,查看控制台console。 3.设置断点:一般是在关键地方设置断点,先找到关键点,然后将该关键点细化;再在关键点 里面设置断点,依次找出Bug。 4.查看变量Variables:在程序运行的当前java类里面,可以查看该类里面的任何属性(包括 Entity,Entity又有属性),这样一层一层的查看参数与变量的值。 5.单步跟踪到每个方法里面Step into,跟踪某个语句Step over,跟踪某方法侯返回Step return。 6.添加表达式:表达式其实是属于变量的一部分,当你想关注确定的变量的时候,可以通过添 加表达式来调试更为直观。 7.查看控制台:控制台是我们找出Bug关键点的平台。在控制台里面可以直接定位到某个文件 的某个具体的方法或者某个语句,而且可以在控制台直接链接到对应的语句去。 8.Java文件的错误除了了在控制台会出现外,在Jsp页面还会出现。在Jsp页面出现的Java文 件的错误,也会表现的页面,同时会指出出错的地方。定位到行代码。 9.Java程序出错频率最高的地方: 1)空指针NullPoint,当一个class或者变量为null的时候,如果你在调用它的方法,系统 会抛出空指针异常。一般会有: a)rkdBiz= (CC_RkdBiz) BaseObjectFactory.getBaseObject("https://www.360docs.net/doc/5c10894453.html,_RkdBiz"); 如果rkdBiz=null,再rkdBiz.insert();就会出现异常。因此,需要先再ClassFactory.xml 文件里面先配置实例化文件。 b)CC_RkdEntity rkdEntityTemp = this.selectRkd(conn, ryEntity, rkdEntity.getRkdID()); if (rkdEntityTemp != null) { // 组织数据 rkdEntityTemp.setGysMc(rkdEntity.getGysMc()); } c)for (int i = 0; i < rkdEntity.getRkdMxEntityArray().length; i++) { //需要加上rkdEntity.getRkdMxEntityArray()!=null的判断 } d)// 获得最大ID,转化为long型,赋值给实体对应的属性 SequenceNoSeeker sequenceNoSeeker = new SequenceNoSeeker(); rkdEntity.setRkdID(Long.valueOf(sequenceNoSeeker.nextSequenceNo(conn,

相关文档
最新文档