文档库 最新最全的文档下载
当前位置:文档库 › 4 错误调试与处理:详细说明

4 错误调试与处理:详细说明

4 错误调试与处理:详细说明
4 错误调试与处理:详细说明

错误调试与处理:详细说明

运行箭头变为断线图标就表明LabVIEW不能运行VI,错误列表窗口中会列出VI断开的具体原因。第二种类型错误通

常难以辨别原因,但LabVIEW拥有多种工具可监视执行的代码,使得过程变得更为容易。

修正断开的VI

如一个VI无法执行,则表示该VI是断开的或不可执行的。如正在创建或编辑VI出现错误时,运行按钮会显示为断开。通常,这是由于需要连线的输入没有连线,或者连线是断开的。单击断开的运行按钮,打开错误列表窗口。错误列表

对话框列出了所有错误,并且描述了错误的原因。双击错误可直接找到错误的出处。

查找VI断开的原因

警告并不阻碍VI的运行。警告仅帮助用户避免VI中的潜在问题。而错误会使VI断开。 VI在运行前须排除任何错误。

单击断开的运行按钮,或选择查看?错误列表,可查看VI断开的原因。 Error List列出了所有的错误。错误项列出了

内存中所有含有错误的项的名称,如VI和项目库。如果两个或多个项目具有相同的名称,该部分会显示每一项目的特

定应用程序实例。

错误和警告部分列出了在存在错误的项目部分选中的VI的错误和警告信息。详细情况(Details)部分描述了错误信息,有时还会建议如何纠正错误。单击帮助(Help)按钮,显示LabVIEW帮助(LabVIEW Help)中详细描述错误并包含

纠正错误的分步指令的主题。

单击显示错误(Show Error)按钮或双击错误描述,可以高亮显示程序框图或前面板包含错误的区域。

图1.错误列表对话框的范例

VI断开的常见原因

下表包含了一些在编辑VI时导致VI断开的常见原因:

-由于数据类型不匹配或存在未连接的接线端,导致程序框图含有断线。关于纠正断线的更多信息见LabVIEW帮助中的纠正断线。

-必需连接的程序框图接线端没有连线关于设定必需连接的输入端和输出端的更多信息见LabVIEW帮助中的使用连线连接程序框图各对象。

-子VI是断开的或将其放置到程序框图上后对其连接器进行了编辑。

修正错误的行为

如果VI仍能运行但生成的是错误结果,那么就表明是功能性错误。 LabVIEW拥有多种工具来帮助分析VI不按预期运行的部分。

程序框图工具栏

运行VI时,在程序框图工具中显示的按钮可用于调试VI。以下是在程序框图中出现的工具栏。

单击高亮显示执行过程按钮,可在运行VI时显示程序框图的动态执行过程。注意程序框图中数据的流动情况。再单击该按钮可以停止执行高亮显示。

执行过程高亮显示表明了程序框图上的数据通过沿着连线移动的圆点从一个节点移动到另一个节点的过程。使用高亮显示执行的同时,结合单步执行,可查看VI中的数据从一个节点移动到另一个节点的全过程。

注:执行过程高亮显示会明显降低VI运行速度。

图2.使用执行过程高亮显示的范例

单击保存连线值按钮可保存执行时数据流中各个点的连线值,将探针置于连线上时,用户可以马上获取通过该连线的

最新数据值。在获取连线上的值之前,VI必须至少成功运行过一次。

单击单步步入按钮,将打开一个节点然后暂停。再次单击单步步入按钮时,将执行第一个操作,然后在子VI或结构的

下一个操作前暂停。也可按下和向下箭头键。单步执行VI是指逐个节点执行VI。每个节点在准备执行时会闪烁。

单击单步步过按钮,将执行一个节点而在下一个节点处暂停。也可按下和向右箭头键。通过步过执行节点,您

将不会单步步入执行节点。

单击单步步出按钮,将完成对当前节点的执行并暂停。 VI执行结束后,单步步出按钮将变为灰色。也可按下

向上箭头键。通过步出执行,可单步执行节点并定位至下一个节点。

如VI中包含警告信息且在错误列表窗口中已勾选显示警告选项,将显示警告信息。警告意味着程序框图存在潜在的问题,但是它不会阻止VI运行。

使用探针工具,在VI运行时检查连线上实时传递的值。如果执行一系列操作的程序框图比较复杂,并且每一步的执行

都可能返回错误值,可以使用探针工具。探针工具结合执行过程高亮显示、单步执行以及断点,可用于确定是否产生

了数据错误以及错误发生在哪里。如有可用数据,高亮显示执行过程、单步调试或在断点处暂停时,探针都会立即更

新和在探针监测窗口中显示数据。当执行过程由于单步执行或断点而在某一节点处暂停时,可用探针探测刚才执行的

连线,查看流经该连线的数值。

解决LabVIEW中错误

无论你对自己所创建的VI多么有信心,你也很难预见到用户可能遇到的每一个错误。没有一个检查错误的机制,用户

仅能知道VI没有正常工作。错误检查可以告诉您为什么出错和在哪里产生了错误。

自动错误处理

每一个错误都有一个数字码和相应的错误信息。

默认状态下,VI运行时LabVIEW会通过中断执行、高亮显示产生错误的子VI或函数,并显示错误对话框来自动处理

每一个错误。

选择文件?VI属性,并从类别下拉菜单中选择执行可禁用当前VI的自动处理错误功能。选择工具?选项,并在类别;

列表中选择程序框图,可以禁用任何新创建的空白VI的自动错误处理。要使VI中的子VI或函数的自动错误处理无效,将它的error out参数连接到另一个子VI或函数的错误输入参数或连接到一个错误输出显示件。

手动错误处理

可以选择其它的错误处理方法。例如,程序框图上有一个I/O VI超时,但并不希望整个应用程序都停止运行,同时也

不希望错误对话框出现。可能是希望VI重新再试一段时间。在LabVIEW中,可以在VI的程序框图上进行这些错误处

理设置。

位于对话框与用户界面选板上的LabVIEW错误处理VI和函数,以及大多数VI和函数的错误输入和错误输出参数可管

理错误。如LabVIEW遇到了错误,可在不同类型的对话框中显示错误信息。将错误处理和调试工具结合起来使用可以发现和管理错误。

在执行任何形式的输入输出(I/O)操作时,都应考虑错误产生的可能性。几乎所有的I/O函数都返回错误信息。在VI中

包含错误检查,尤其是I/O操作(如文件、串口、仪器测量、数据采集和通讯),并且提供一个恰当处理错误的机制。

LabVIEW错误处理VI(error handling VIs),函数和参数可用于管理错误。或者可通过编程修改错误,然后通过连接

子VI或函数的错误输出和清除错误VI的错误输入,删除错误。将错误处理和调试工具结合起来使用可以发现和管理

错误。

错误簇

使用错误簇输入控件和显示控件创建子VI中的错误输入和输出。

错误输入和错误输出簇包括以下信息:

-状态(status)是一个布尔值,当错误产生时报告TRUE。

-错误码(code)是一个32位有符号整数,它以数字方式识别错误。一个非零错误代码和FALSE状态相结合可表示

警告但不是错误。

-源(source)是用于识别错误发生位置的字符串。

LabVIEW中的错误处理遵循数据流模式。错误信息就像数据值一样流经VI。将错误信息从VI的开始一直连接到结尾。在VI的结尾处包含一个错误处理VI,例如简易错误处理器,以确定VI的运行是否未出差错。在所使用或创建的每一

个VI中使用错误输入和错误输出簇将错误信息在VI中传递。

当VI运行时,LabVIEW会在每个执行节点检测错误。如果LabVIEW没有发现任何错误,该节点将正常执行。如果LabVIEW检测到错误,该节点会将错误传递到下一个节点而不执行那一部分代码。下面的节点也同样如此处理,直到

最后一个节点。在执行流结束时,LabVIEW报告错误。

解释错误

错误发生时,在簇边界内右键单击鼠标,从快捷菜单中选择解释错误,可打开解释错误对话框。解释错误对话框包含

错误的相关信息。如果VI有警告,但没有错误,快捷菜单将包括解释警告选项。

通过帮助?解释错误菜单也可以访问解释错误对话框。

使用While循环(While Loops)处理错误

可将错误簇连接到While循环或For循环的条件接线端以停止循环的运行。如将错误簇连接到条件接线端,只有错误

簇状态参数的TRUE或FALSE值会传递到接线端。当错误发生时,循环即停止执行。对于具有条件接线端的For循环,还必须为总数接线端连接一个值或对一个输入数组进行自动索引以设置循环的最大次数。当发生一个错误或设置

的循环次数完成后,For循环即停止运行。

当将一个错误簇连接到条件接线端上时,快捷菜单项Stop if True和Continue if True将改变为错误时停止和错误时继续。

如图3,错误簇和停止按钮可以决定何时停止循环。推荐使用这个方法停止大部分循环,因为无论是要求停止循环或是错误出现时(生产和错误),循环就会停止。

图3.停止While循环

错误处理及调试_教学设计.

《PHP程序设计基础教程》 教学设计 课程名称:PHP程序设计基础课程 授课年级:2014年级 授课学期:2015学年第二学期 教师姓名:陆启军

E_USER_NOTICE ] ) 在上述声明中,第一个参数是错误信息内容,第二个参数是错误类别,默认为E_UESR_NOTICE。 需要注意的是,在使用trigger_error()函数触发错误之前,一定要先使用ini_set()函数让错误显示,否则使用trigger_error()函数无法触发错误。 第二课时 (如何处理错误) 如何处理错误 ?显示错误报告 在实际开发过程中,不可避免的会出现各种各样的错误,为了提高开发效率,PHP语言提供了显示错误的机制,该机制可以控制是否显示错误以及显示错误的级别等。在PHP中实现显示错误的机制有如下两种方式:?修改配置文件 通过直接配置php.ini文件来实现显示错误报告,代码如下所示:error_reporting(E_ALL & ~E_NOTICE); display_errors = on; 上述代码中,error_reporting用于设置错误级别,display_errors用于设置是否显示错误报告。 ?error_reporting()和ini_set()函数 通过PHP语言提供的error_reporting()和ini_set()函数实现显示错误报告,代码如下: 上述代码中,ini_set()函数用来设置错误信息是否显示,error_reporting()函数用于设置错误级别。第2行表示显示除E_NOTICE之外的所有级别错误,第3行表示显示错误信息。 ?die()函数 die()函数可以用来定义输出错误信息,常用于业务逻辑的错误显示,代码如下: die()函数与or运算符的配合使用,代码如下所示: ?记录错误日志 网站已经上线或者正在运行,错误显示出来会影响用户体验,这时就需

DSP调试及烧写和加载常见错误及分析

Error: Read status value 0x0001 from symbol PRG_status Flash algorithm failed during clear operation 开始可以正常烧写的,但是上机调试了一下就不能写了. 在烧写lf2407内部flash时出现如下错误,不知是什么原因造成的? Error:Read status value 0x0001 from symbol PRG_status Flash algorithm failed during clear operation. 换了一个芯片后正常 之前有一次在试CCS功能时,一不小心点了一次加密,还没有执行完,就马上点了解密,大概这样烧坏了吧! 太脆弱了,再也不敢试加密了 CMD文件要避开FLASH的40H--44H区间, 我也出现过这样的问题,烧写2407A的片内flash时会出现下面的错误提示:Error: Read status value 0x0001 form symbol PRG_status Flash algorithm failed during clear operation 后来换了一块2407就能烧写了。 是不是2407的flash坏了?有没有办法检测或者修复flash? 昨天在网上查了一下,很多人都遇到了这种问题,可能是dsp内部flash烧坏了吧! 今天重新换了一块芯片,可以烧录进去了,但是上拿到样机上调试一下,再烧录就出现了同样的问题,估计又是flash坏了,到底是什么原因引起的?是不是电源引起的呢? 我也出现过能仿真,但不能烧写的情况!解决方法: 解决方法:降低时钟频率。点击FLASH插件上的“View Config File”,打开VAR.h文件。将该文件中的“PLL_PATIO_CONST .Set 0000h”改成 “PLL_PATIO_CONST .Set 0200h”存盘后,执行目录下的Buildall.bat批处理文件。再重新启动CCS及FLASH插件。 请教高手:在烧写程序的时候出现如下错误:Error: Read status value 0x0001 from s ymbol PRG_status Flash algorithm failed during clear operation

C语言调试常见错误及修改方法(附习题)

1.调试 C 程序时常见的错误类型分析 一般情况下,错误主要分为两大类:一、语法错误。对于这种错误,用编译器很容易解决。所以,改错题的第一步是先编译,解决这类语法错误。下面总结了二级C 语言上机改错题中常见的语法错误: (1) 丢失分号,或分号误写成逗号。 (2) 关键字拼写错误,如本来小写变成大写。 (3) 语句格式错误,例如for 语句中多写或者少写分号。 (4) 表达式声明错误,例如:少了() (5) 函数类型说明错误。与main ()函数中不一致。 (6) 函数形参类型声明错误。例如:少* 等。 (7) 运算符书写错误,例如:/ 写成了。二、逻辑错误,或者叫语义错误,这和实现程序功能紧密相关,一般不能用编译器发现。对于逻辑错误可以按这样的步骤进行查找。 (1) 先读试题,看清题目的功能要求。 (2) 通读程序,看懂程序中算法的实现方法。 (3) 细看程序,发现常见错误点。 2.改错题的改错方式总结,当然这些总结只能对大部分改错行有效 1、若错误行是函数首部,可分为以下几种情况: A、该行最后若有分号则删除,中间若有分号则改成逗号 B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m 个元素的指针变量,则第二维的长度必须与main 中对应数组的第二维长度相同 C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return 后变量的类型一致。 2、若错误行是if 或while 语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。 3、若错误行中有if、while 、for 则要特别注意条件表达式的错误问题: A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符 B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号 C、f or 中要用分号分隔表达式,而不是用逗号 4、语法错误 A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。 B、大小写不对,若错误行中有大写字母则一般都改成小写字母。 5、指针变量的运用,若错误行中有指针变量,并且该变量名前没有指针运算符则一般都是加上指针运算符 6、若错误行为return 语句,则首先看是否是缺少分号若是则加上分号即可;否则就是return 后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式)

ccs33中建立-编译-调试工程及常见错误讲解.

Part1:ccs3.3中新建一个DM6437的示例工程 1、连接好板子,将板子上仿真器的usb口插到电脑上,启动ccs后,ccs会去获取板子信息并在打开的文件目录中自动生成一个文件,如图所示:笔者使用的是6437的板子 2、用file-new选择建立一个dsp/bios文件 在打开的对话框中选择你使用的板子的型号,如下图: 3、这个时候ccs为我们建立了一个bios文件,以图表显示,里面按照所选板子的类型添加相应的硬件和其他模块。保存这个文件到工程目录下先,文件类型为tcf。 4、保存这个文件的同时,ccs按照bios中的配置在当前目录下自动生成了一个cmd文件。此时将tcf文件和这个cmd文件同时添加到工程中,使用 5、然后需要修改一个编译选项,点击下图所示选项进去:

6、打开后在编译选项对话框总会看到一个命令行,其中最后一句是-mv6400,因为用的是6467的板子,所以这个选项要修改成-mv64+;否则编译会报错:编译选项不正确;但并非所有类型的板子都要改,这个只针对型号为64+的板子。 7、file-new-source file建立一个c源文件,保存并加入到工程中。 以下是示例程序: #include #include #include Int main(Int argc, String argv[])//main函数的类型必须这样写 { unsigned int i; unsigned int sum=0; for(i = 0; i<=100; i++ ) {

sum += i; } printf("the sum = %d .\n",sum); printf("the program run over!\n"); printf("the program run over!\n");} 注意:1)如果想要printf正确输出信息,需要添加对应平台的rts64plus.lib文件。这里是64+平台所以是在C:\CCStudio_v3.3\C6000\cgtools\lib目录下的rts64plus.lib文件,否则ccs 会提示如下警告和错误: >> warning: entry point symbol _c_int00 undefined undefined first referenced symbol in file --------- ---------------- _printf E:\\WorkContent\\projectExample\\Test\\Debug\\test.obj >> error: symbol referencing errors - './Debug/Test.out' not built 2)如果想要printf正确输出信息,cmd文件中必须指定heap的大小,即cmd文件这样写: -c -stack 0x00001000 /* Stack Size */ -heap 0x00001000 /* Heap Size */ //前面这三项必不可少 MEMORY { L2RAM: o = 0x10800000 l = 0x00020000 DDR2: o = 0x80000000 l = 0x10000000 } SECTIONS { .bss > L2RAM .cinit > L2RAM .cio > L2RAM .const > L2RAM .data > L2RAM .far > L2RAM .stack > L2RAM .switch > L2RAM .sysmem > L2RAM .text > L2RAM .ddr2 > DDR2 }

程序调试与常见程序错误

程序调试与常见程序错误 目录 一、在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.

第6章 Delphi程序异常处理与调试技术

第六章程序异常处理与调试技术 在Delphi中有两种程序错误,一种是编译错误,在程序编辑阶段就可以由编译器发现并给出提示。另外一种是运行错误,这类错误不能在编译阶段查出,只能在程序执行时发现,称为运行错误。 Delphi提供了一种机制来处理运行错误,保护程序的正常执行,这种机制就是异常处理。异常处理的方法是把正常的执行程序同错误的处理程序分离开来,这样可以保证在没有错误时,程序正常执行,当发生错误时,执行错误处理部分的程序,然后程序跳出保护模块,继续执行后续的程序。 6.1 Object Pascal异常的种类 异常的种类:Delphi内建的异常类,程序员自定义的异常类。 异常基类及其属性和主要方法:在Delphi中,所有异常的基类是Exception 类。所有其他异常类都是由该类派生而来。 1. exception属性 该类有两个基本属性:HelpContext和Message。 (1)Exception.HelpContext属性 该属性的定义如下: ?Type ThelpContext= -MaxLongint..MaxLongint; ?Property HelpContext:ThelpContext; HelpContext是ThelpContext类的一个实例,它提供了与异常对象联系在一起的上下文相关帮助信息的序列号。该序列号决定当发生异常时用户按F1键显

示的一个异常错误的帮助信息。 (2)Exception.Message属性 该属性的定义如下: property Message: string 该属性存储异常发生时的错误信息。可以通过该属性在提示错误对话框中显示错误信息字符串。 2.exception方法 (1)Exception.Create方法 该方法的定义形式为: Constructor Create(Const Msg: String); 该方法用来产生一个带有一条简单提示信息的对话框,对话框中的提示内容由Msg提供 (2)Exception.CreateFmt方法 该方法的定义格式如下: Constructor CreateFmt(Const Msg:String;Const Args:Array of Const) ; 该方法用来产生一个带有格式化字符串提示信息的对话框,格式化的字符串由Msg和Args数组共同提供,其中数组Args负责提供用于格式化的数值。 (3)Exception.CreatHelp方法 该方法的定义格式如下: Constructor CreateHelp(Const Msg:String; AhelpContsxt:Integer) ; 该方法产生一个带有一条简单提示信息和上下文帮助序列号的提示对话框。其中Msg参数包含了显示在异常对话框中的运行错误信息。AhelpContext参数包

C语言程序编辑或调试中常见的错误

常见错误和程序分析 (1)忘记定义变量。例如: void main() { x=3; y=6; printf(“%d\n”,x+y); } C要求对程序中用到的美一个变量都必须定义其类型,上面程序中没有对x,y 进行定义。应在函数体的开头加int x,y; (2)输入输出的数据类型与所用格式说明符不一致。例如,若a已定义为整数,b已定义为实型: a=3;b=4.5; /*对a和b赋值*/ printf(“%f %d\n”,a,b); 编译时不给出出错信息,但运行结果将与原意不符,输出为0.000000 16402它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后2个字节中的数据按%d作为整数输出)。 (3)未注意int型的数据的数值范围。Turbo C等编译系统,对一个整型数据分配2个字节。因此一个整数的范围为-2的13次方到2的15次方减1,即-32768~32767常见这样的程序段: int num; num=89101; printf(“%d”,num); 得到的却是23565,原因是89101已超过32767。2个字节容纳不下89101,则将高位截去,即将超过低16位的数截去,也即89101-65536=23565,有时还会出现负数。这种情况应改为: Long int num; num=89101; printf(“%ld”,num); 注意,如果只定义num为long型,而在输出时扔用%d说明符,也会出现以上错误。 (4)在输出语句scanf中忘记使用变量的地址符。例如: scanf(“%d%d”,a,b); 这是很多初学者刚学C语言时常见的疏忽,应写为scanf(“%d%d”,&a,&b); (5)输入数据的形式与要求不符。例如有以下scanf函数: scanf(“%d%d”,&a,&b); 有人输入 3 , 4 ,这是错的数据间应该用空格来分隔,读者可以用printf(“%d%d”,a,b);来验证下。应该输入 3 4,除非函数是scanf(“%d,%d”,&a,&b); 还应注意不能企图用

C语言调试功能以及常见错误提示详解

C语言编译环境中的 调试功能及常见错误提示 调试功能 1.常用健 : 激活系统菜单 : 将光标在编辑窗口和、信息窗口之间切换 : 加载一个文件 + : 查看程序运行结果 : 得到有关编辑器在线帮助 + : 得到有关C语言的在线帮助 + : 终止正在运行的程序 2.块操作 KB: 定义块首 KK: 定义块尾 KV: 块移动 KC: 块复制 KY: 块删除 KH: 取消块定义 3.查找、替换和删除操作 QF: 查找字符串 QA: 查找并替换字符串 Option: G(全程),B(向文件头),N(直接替换) Y : 删除一行 QY: 删除从光标位置到行末的所有字符 编译中的常见错误例析 (1) 警告类错误 …XXX?declare but never used变量XXX已定义但从未用过。 …XXX?is assigned a value which is never used变量XXX已赋值但从未用过。 Code has no effect 程序中含有没有实际作用的代码。 Non-portable pointer conversion不适当的指针转换,可能是在应该 使用指针的地方用了一个非0的数 值。 Possible use of …XXX?before definition表达式中使用了未赋值的变量 Redeclaration of …main?一个程序文件中主函数main不止一个。 Suspicious pointer conversion可疑的指针转换。通常是使用了基本类型不匹配的指针。 Unreachable code程序含有不能执行到的代码。 (2) 错误或致命错误 Compound statement missing } in function main程序结尾缺少括号}。

调试与错误处理

第9章调试与错误处理 一、问答题 1.请思考如何避免错误。 答:1)事先精心设计应用程序,描述清楚相关事件以及代码响应每一事件的方法,为每一事件过程和每个普通过程都指定一个特点的、明确的目标。 2)多加注释。如果用注释说明每个过程的目的,在以后分析代码时,能更深入地理解这些代码。 3)对过程中用到的每个变量或对象都应该在过程开始部分加以定义。 4)在应用程序中对变量和对象提出一种前后一致的命名方案。 2.请简要设计错误处理程序的三个步骤。 答:1)捕获错误,并强制程序跳转 2)编写错误处理程序 3)退出错误处理程序 3.简述常用的程序调试技巧。 答:1)事先做好备份; 2)分离受怀疑的程序; 3)缩小搜索范围; 4)使用MsgBox语句。 4.简要说明VB程序调试的主要方法和工具。 答:VB 程序调试的主要方法:用编译器提示错误;使用调试工具来发现和改正错误;采用常用的调试技巧,如事先做好备份,分离受怀疑的程序,缩小搜索范围,使用MsgBox语句等。 主要工具:“调试”菜单下的“逐语句”、“逐过程”、“跳出”、“运行到光标处”、“添加监视”、“快速监视”、“切换断点”等子菜单项。 5.VB程序错误大体可分为哪几种,它们的含义是什么? 答:VB程序错误大体分为三种:编译错误、实时错误和语法错误。 编译错误是在编写程序时书写了有错误的语法的代码,导致VB编译器无法正确解释源代码而产生的错误,也称语法错误。实时错误是指在运行期间,一跳语句试图执行一条不可能执行的操作而产生的错误,也称运行时错误。逻辑错误是指程序的运行结果和程序员的设想有出入时产生的错误。 6.请说明On Error GoTo 与On Error Resume Next 的区别。 答:On Error GoTo 行标识符语句:当发生错误时,使用该语句强制改变程序的执行方向。而On Error Resume Next 语句:当发生错误时,VB程序将忽略引发错误的语句,并继续执行下一条语句。 二、程序设计题 1.程序改错。以前面学到的冒泡排序算法为例,开发以下程序,请上机练习排除其中的错误。 1

STM 调试过程中常见的问题及解决方法

一、在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device foun d.” 解决办法:Keil MDK默认使用ULINK仿真器下载程序,在“Utilities选项卡”下把编程所使用的仿真器改为相应的类型即可。 二、编译工程时提示如下信息: main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10 x_nvic.o). main.axf: Error: L6218E: Undefined symbol __GetBASEPRI (referred from stm32f10x_nvi c.o). main.axf: Error: L6218E: Undefined symbol __RESETFAULTMASK (referred from stm32f 10x_nvic.o). main.axf: Error: L6218E: Undefined symbol __RESETPRIMASK (referred from stm32f10x _nvic.o). main.axf: Error: L6218E: Undefined symbol __SETFAULTMASK (referred from stm32f10x _nvic.o). main.axf: Error: L6218E: Undefined symbol __SETPRIMASK (referred from stm32f10x_n vic.o). 解决办法:工程缺少“cortexm3_macro.s”文件,把cortexm3_macro.s和STM3210x.s全部添加到工程即可。 三、调试器不能连接到STM32的问题与解决办法 很多人都碰到过调试器不能连接到STM32的问题,不管是IAR的J-Link还是Keil的ULink,或者是ST的ST-Link。出现这个问题时,调试软件会提示不能建立与Cortex-M3的连接,或提示不能下载程序,或提示找不到要调试的设备等。 这样的问题都是发生在调试那些可以在CPU不干预的时候自动运行的模块、或在调试低功耗模式的程序的时候。所谓“可以在CPU不干预的时候自动运行的模块”包括:DMA、定时器、连续转换模式下的ADC、看门狗等模块。 -------------------------------------------------------------------------------- 这个问题的根源是: 1. 调试器需要在RAM内执行一段程序,对Flash进行擦写操作,如果不停止这些自动运行的模块,它们会干扰程序在RAM中的执行,致使下载失败。比如DMA模块被配置为不停地拷贝一段数据区,而调试器刚好需要使用DMA数据传输的目标区域,这时DMA的操作将会与调试器的操作发生冲突。再比如,如果启动了看门狗而没有执行硬件复位,则在下次调试器需要下载程序时,看门狗超时将触发芯片复位,导致下载操作失败。 2. 低功耗是通过停止CPU的时钟而实现,JTAG调试是通过与CPU的通信实现,停止了C PU的时钟致使调试器会失去与CPU的通信。 --------------------------------------------------------------------------------

易语言程序设计 第八章 程序调试及错误处理 免费

<易语言程序设计> 作者:蔷薇的羽翼 第八章程序调试及错误处理 程序在编写完成后可能会存在这样那样的问题,或测试后发现了错误,这些都与要开发人员去寻找错误发生的地方并改正,即调试程序,在易语言的开发环境中提供了诸如单步跟踪,设置执行断点,监视变量值等调试手段,能够帮助开发人员快速定位错误,掌握这些调试手段是每个开发人员的基本要求。 8.1程序有哪些错误 古语云:人非圣贤孰能无过。编写程序中总是或多或少的错误发生。这些错误根据产生的原因可以分为三种:语法错误逻辑错误和异常错误。 针对不同的错误,易语言提供不同的解决方案,但首先要区分三种错误,我们以走路为例说明,一个人要到某地,,路线的选择和进行过程好比是我们设计好的程序,如果路线正确,天气理想,个人在努力就一定会到到目的地,这就说程序运行正常,但可能会出现这样的情况,比如第一,汽车没有油了。。这种不符合规则的做法在程序的一开始我们就已经知道错误了,就好比编译错误,第二,这人的路线错了,好比在岔道口走错了方向,结果走到了其他的地发,这好比逻辑错误,第三,遵守了规则,路线也正确,但是没想到某个路被洪水冲垮了,这就是运行错误。 1.语法编译错误 不正确的书写格式会造成编译错误,比如漏掉了某些标点符号,调用函数没有提供必要的参数,数据类型不匹配,这些错误大多都会在编译调试时候自动检测出来并显示错误信息。 2.逻辑错误 当应用程序为按照预期的方式执行时就会产生逻辑错误,从语法的角度来看,代码是正确有效地,运行过程也是顺利的,但是产生了不正确的结果,其原因就是应用程序逻辑出现了错误。 检测程序是否含有逻辑错误可以采用人工检查代码测试程序的方法,测试就是运行应用程序,将结果和预期的目标进行比较的一种动态检查手段,对含有逻辑错误的程序需要进行调试,易语言提供了强大使用方便的调试手段,能帮助我们了解程序运行的整个过程和每个时刻的状态,从而迅速定位错误 3.运行异常错误 应用程序运行期间,当一个语句执行操作时发生错误的事件,就会产生运行异常错误,比如用户意料之外的数组下标越界等,这些错误如果没有被代码捕获,会是程序突然异常终止而无法继续运行。 8.2如何调试程序 1.常用的调试手段

中文笔记6错误处理调试及文件输入输出

6. Error-Handling, Debugging and File Input/Output 错误类型 语法错误、运行时错误、逻辑错误语法错误:不符合 VB 语法的错误,如关键字出错、非法的参数等。运行时错误:超出了程序的控制范围,如变量的范围范围溢出、文件没有找到等。 VB允许你跟踪这样的错误,并努力改正它们。 逻辑错误:最难发现的,带有逻辑错误的程序可以运行,但运行结果通常是错误的。VB 的调试器有助于发现这种错误。 减少错误的方式:仔细设计应用程序,设计时间越长,调试所需的时间就越少。适度使用程序注释 对变量、对象及过程使用一致、有意义的名称。 跟踪运行错误并处理它运行时错误时可跟踪的,这意味着 VB能够发现错误,并允许你跟踪及修正它。跟踪错误使用关键字 On Error ,语法如下: On Error GoTo errlabel 此行下面的语句如果出现错误,将跳到 errlabel 标签处执行。例如: Sub SubExample() . [Declare variables, ...] On Error GoTo HandleErrors ‘错误跟踪开始 . [Procedure code] ‘在执行这段代码过程中出现任何错误时, 程序都将跳到 HandleErrors 处开始执行 Exit Sub HandleErrors: . [Error handling code] ‘根据错误类型,选择处理方法 End Sub 如果在过程中想关闭错误跟踪,则可以使用 On Error GoTo 0 对象Err的属性Number表示与当前的错误条件相关。函数Error()把错误号当作参数并返回一个字符串来描述对应的错误。 当错误被跟踪并采取一定的措施后,程序执行流程必须返回到应用程序,这种控制是通过 Resume 语句实现的, Resume 有三种表达形式: Resume 重新执行引起错误的语句,这可能比较危险,因为如果错误没有 被正确处理,没会出现死循环。 Resume Next 程序将从出现错误的语句的下一条语句起开始执行 Resume 标号程序将从标号所标示的语句开始执行

Visual C++6.0中的调试工具使用及常见错误

C语言常见错误及解决方法 (注:红色粗体是常见的错误,请大家检查自己的程序,并注意尽量不要犯这些常见的错误。其余它体是避免错误的方法和正确的写法) 一、基础知识和数据类型、表达式 1、拼写错误,尤其是include,main,void,float等词。C语言的32个关键字与基本含义如下:double:声明双精度变量或函数 int:声明整型变量或函数 char:声明字符型变量或函数 float:声明浮点型变量或函数 void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) auto:声明自动变量一般不使用 struct:声明结构体变量或函数 break:跳出当前循环 else:条件语句否定分支(与if连用) long:声明长整型变量或函数 switch:用于开关语句 case:开关语句分支 enum:声明枚举类型 register:声明积存器变量 typedef:用以给数据类型取别名(当然还有其他作用) extern:声明变量是在其他文件正声明(也可以看做是引用变量) return:子程序返回语句(可以带参数,也看不带参数) union:声明联合数据类型 const:声明只读变量 short:声明短整型变量或函数 unsigned:声明无符号类型变量或函数 continue:结束当前循环,开始下一轮循环 for:一种循环语句(可意会不可言传) signed:生命有符号类型变量或函数 default:开关语句中的“其他”分支 goto:无条件跳转语句 sizeof:计算数据类型长度 volatile:说明变量在程序执行中可被隐含地改变 do:循环语句的循环体 while:循环语句的循环条件 static:声明静态变量 if:条件语句 2、{},[],(),‘’,“”不配对。解决这个问题最好的方法就是每当写这些符号的时候就 先写成一对,然后再在中间加内容。 3、忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要 加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命

第9章三菱PLC的编程软件及调试.pdf

第9章 三菱PLC的编程软件及调试 9.1GX Developer的功能特点及基本操作 1.功能特点 编程软件是指在个人计算机上运行的、由PLC厂家提供的、用于PLC编程的工具软件。早期运行在Dos环境下,而今都运行在Windows系统下。而且,所有PLC厂商在提供PLC硬件的同时,也都提供编程软件。 GX Developer是三菱公司开发的用于三菱A系列、QnA系列、Q系列、FX系列可编程控制器的编程软件,目前版本已升级到8.X,是一个功能强大的通用性编程软件。 三菱编程软件GX Developer主要有以下功能: (1)程序的创建。 (2)对可编程控制器CPU进行写入、读出。 (3)监视:包括梯形图监视、软元件批量监视、软元件登录监视功能等。 (4)调试:将所创建的顺控程序写入到可编程控制器CPU中,对顺控程序能否正常动作进行测试。此外,通过使用新开发的GX Simulator,可以在单台个人计算机上进行仿真调试。 (5)PLC诊断 用于显示当前的出错状态以及故障记录以及故障处理情况等。此外,通过系统监视(仅为QCPU (Q模式))可以获取关于特殊功能的详细信息,以便在出错时可以在更短的时间内完成除错。 GX Developer具有以下特点: (1)软件通用 GX Developer能够用于三菱Q系列、QnA系列、A系列、FX系列PLC的编程。 (2)操作性强 利用Windows的优越性,使操作性大大增强,能够将Excel、Word等做成的说明数据进行复制、粘贴,并有效利用。 (3)程序的标准化 标签编程:标签编程制作通用的程序可以根据机器的构成,方便地改变其软元件的配置,从而能够简单地被其他程序利用。 功能块:功能块是以提高顺序程序的开发效率为目的而开发的一种功能。把开发顺序程序时反复使用的顺序程序回路块零件化,使得顺序程序的开发变得容易。此外,零件化后,能够防止将其运用到别的顺序程序时的顺序输入错误。 宏:可以事先对任意梯形图组进行命名(宏名称)并登记为文件,然后可以轻松地反复调用该梯形图组(宏调用)。 (4)丰富的编程语言 可以通过继电器符号语言、逻辑符号语言、顺序功能图创建功能块,此外,还新增了结构化文本(ST语言)。 (5)访问其它站时的设置简单 当本站点与其它图形化的连接对象站点要构成复杂系统的时候,GX Developer的设置简单。 (6)能够用各种方法和可编程控制器CPU连接 可经由串行通信口、USB、MELSECNET/10(H)计算机插板、MELSECNET (Ⅱ)计算机插板、CC-link 计算机插板、Ethernet计算机插板、CPU计算机插板和AF计算机插板与可编程控制器CPU连接。 (7) 丰富的调试功能 运用梯形图逻辑测试功能,能够更加简单地进行各种离线调试。此外,通过该软件还可进行模拟在线调试。 在帮助中提供了CPU错误代码和特殊继电器/特殊寄存器的功能说明,所以,对在线调试过程中发生的错误,可以通过该帮助菜单非常方便地进行查询,从而缩短控制软件的编程调试时间。

第7章异常处理与程序调试技术(精)

第7章异常处理与程序调试技术 第1节异常处理概述 一、异常的概念 所谓异常是指程序在运行时遇到的一些无法预知,需要特别处理的状况。例如程序要打开一个不存在的文件、网络连接中断、操作数越界、装载一个不存在的类等问题。 二、Delphi的异常处理机制 Delphi提供了一套默认的自动异常处理机制,即当程序发生错误后会自动退出当前运行的程序模块,并以对话框的形式给出相应的错误信息,但是并不会引起应用程序的非法终止。 Delphi的异常处理机制是建立在保护块的概念上的。保护块是用保留字try和end封装起来的一段代码。当应用程序发生错误时,系统会自动创建相应的异常类的对象,该异常对象通常包含了错误的相关信息。程序可以捕获并处理这个异常对象,如果程序中没有定义对该异常的处理,则系统会自动产生一个消息框来描述这个错误,并保证程序不会非法终止。 三、异常类 在Delphi中,所有的异常类都派生自Exception类,该类是在SysUtils单元中定义的,如果一个程序的Uses语句中包含了SysUtils单元,则运行中发生错误时就会引发一个异常。 需要注意的是,异常不同于错误,编程者可以引发一个自定义异常。例如: Raise Exception.Create('My Error'); 第2节异常处理的语法 Delphi提供了两种处理异常的基本结构:try…except和try…finally。前者主要用于编写异常处理代码,后者主要用于保护系统资源。 一、try…except…end try…except…end形成一个异常响应保护块。正常情况下except后面的语句并不会被执行,而当一条或多条try块中的语句执行失败时,则发生异常,程序自动跳到except块中,进入异常响应处理模块中去执行。当异常被响应后异常类自动清除。

C语言编程常见错误和程序调试

第十五章:C语言编程常见错误和程序调试 15.1 C语言编程常见错误 如果提示工具连接错误,则表示KEIL安装程序有问题,重新卸载,并全部删除后重新再进行安装后即可。 15.2 KEILC程序调试常见错误 https://www.wendangku.net/doc/2a11825263.html,pling :C:\8051\MANN.C Error:318:can’t open file ‘beep.h’ 说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中 https://www.wendangku.net/doc/2a11825263.html,pling:C:\8051\LED.C Error 237:’LedOn’:function already has a body 说明LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的 3.WARNING 206:’DelayX1ms’: missing function-prototype C:\8051\INPUT.C Error 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C 说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作声明 解决方法编写DelayX1ms 的内容编写完后也要作声明或作外部声明可在delay.h 的包含档声明成外部以便其它函数调用 4.***WARNING 1:UNRESOLVED EXTERNAL SYMBOL SYMBOL:MUSIC3 MODULE:C:\8051\MUSIC.OBJ(MUSIC) ***WARNING 2:REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL:MUSIC3 MODULE:C:\8051\MUSIC.OBJ(MUSIC) ADDRESS:0018H 说明程序中有调用MUSIC 函数但未将该函数的含扩档C 加入到工程档Prj 作编译和连接解决方法设MUSIC3 函数在MUSIC C 里将MUSIC C 添加到工程文件中去 5.***ERROR 107:ADDESS SPACE OVERFLOW SPACE: DATA SEGMENT: _DATA_GOUP_ LENGTH: 0018H ***ERROR 118: REFERENCE MADE TO ERRONEOUS EXTERNAL SYMBOL: VOLUME MODULE: C:\8051\OSDM.OBJ (OSDM) ADDRESS: 4036H 说明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象。 解决方法将以data 型别定义的公共变量修改为idata 型别的定义 15.3 C 编译器错误信息中文翻译 1.Ambiguous operators need parentheses 不明确的运算需要用括号括起 2.Ambiguous symbol ``xxx`` 不明确的符号 3.Argument list syntax error 参数表语法错误 4.Array bounds missing 丢失数组界限符 5.Array size toolarge

MATLAB程序调试常见问题总结

MATLAB 程序调试 程序调试是一个很基本也很重要的问题。人不是神,没有谁能一遍写出完全正确没有错误的程序。 错误的程序大致分为以下三类: 1 拼写错误:比如应该是sum() ,写成了smu();这样的错误程序运行时会提示错误。 2 语法错误:比如6/0 这样的就会造成错误;这样的程序不一定会报错,但是结果显示的完全不正常。 3 逻辑错误:这样的错误非常隐蔽,往往是对算法考虑不周全。程序可以顺利通过,显示的结果也是正常的数值,但是与先验的预期不符合。 那么:如何发现错误呢? 最简单的莫过于MATLAB 直接告诉你哪行出错了,但是很多时候情况并不这么简单。比如第35 行出错了,但是出错的原因是因为上面几行的一些中间结果出错导致;或者程序根本没有报错,但是最后的结果不对。 这种时候就需要单步调试。 断点: 所谓断点,就是程序运行啊运行,运行到有断点的这一步会自动停住,方便你在中间环节调试,监督程序运行。 程序运行到当前断点:

S A i V -T A r d L V -F i t ‰ *l t l i F E ^ H Λ^ E ■ ?> I r a S ^a ?- Γ 9?l S i ?e *l. 1 诒 1诒-?*s τ s ? >? - *?K F ?? .0r l .^?<^?L ?岁: U I-□ 」 ? [■ J i . :1S-翼

在当前断点处查看变量:

STEP IN , 查看子函数运行情况:

子函数中的步进和跳出:

以上说的是MA TLAB 调试程序中最常用的方法。此外再介绍一个函数:DBSTOP 在一般的情况下,MATLAB 运行程序时遇到错误会自动停止运行。而这个函数可以实现遇到错误时自动进入调试状态,停在当前出错行。语法格式: DBSTOP IF ERROR 当然还有很多其他格式,具体的就看MA TLAB HELP 吧。

相关文档