当前位置:文档之家› vb可捕获的错误

vb可捕获的错误

vb可捕获的错误
vb可捕获的错误

vb可捕获的错误

private sub fun() on error goto err '出现错误,转移到err

.

.

.

exit sub

err:

on error goto 0 '关闭错误捕获

if err.number=3721 then

.

.

.

end if

end sub

vb可捕获的错误

可捕获的错误通常发生在应用程序运行时,但也有一些会发生在开发期间或编译时间。可使用On Error 语句与Err 对象来探测并回应可捕获的错误。1 –1000 之间未使用的错误号都是保留给Visual Basic 以后使用的。

代码信息

3没有返回的GoSub

5无效的过程调用

6溢出

7内存不足

9数组索引超出范围

10此数组为固定的或暂时锁定

11除以零

13类型不符合

14字符串空间不足

16表达式太复杂

17不能完成所要求的操作

18发生用户中断

20没有恢复的错误

28堆栈空间不足

35没有定义子程序、函数,或属性47DLL 应用程序的客户端过多

48装入DLL 时发生错误49DLL 调用规格错误

51内部错误

52错误的文件名或数目

53文件找不到

54错误的文件方式

55文件已打开

57 I/O 设备错误

58文件已经存在

59记录的长度错误

61磁盘已满

62输入已超过文件结尾

63记录的个数错误

67文件过多

68设备不可用

70没有访问权限

71磁盘尚未就绪

74不能用其他磁盘机重命名

75路径/文件访问错误

76找不到路径

91尚未设置对象变量或With 区块变量92For循环没有被初始化

93无效的模式字符串

94Null 的使用无效

97不能在对象上调用Friend 过程,该对象不是定义类的实例298系统DLL 不能被加载

320在指定的文件中不能使用字符设备名

321无效的文件格式

322不能建立必要的临时文件

325源文件中有无效的格式

327未找到命名的数据值

328非法参数,不能写入数组

335不能访问系统注册表

336ActiveX 部件不能正确注册

337未找到ActiveX 部件

338ActiveX 部件不能正确运行

360对象已经加载

361不能加载或卸载该对象

363未找到指定的ActiveX 控件364对象未卸载

365在该上下文中不能卸载

368指定文件过时。该程序要求较新版本

371指定的对象不能用作供显示的所有者窗体380属性值无效

381无效的属性数组索引

382属性设置不能在运行时完成

383属性设置不能用于只读属性

385需要属性数组索引

387属性设置不允许

393属性的取得不能在运行时完成

394属性的取得不能用于只写属性

400窗体已经显示,不能显示为模式窗体402代码必须先关闭顶端模式窗体

419允许使用否定的对象

422找不到属性

423找不到属性或方法

424需要对象

425无效的对象使用

429ActiveX 部件不能建立对象或返回对此对象的引用430类不支持自动操作

432在自动操作期间找不到文件或类名

438对象不支持此属性或方法

440自动操作错误

442连接至型态程序库或对象程序库的远程处理已经丢失

443自动操作对象没有默认值

445对象不支持此动作

446对象不支持指定参数

447对象不支持当前的位置设置

448找不到指定参数

449参数无选择性或无效的属性设置450参数的个数错误或无效的属性设置451对象不是集合对象

452序数无效

453找不到指定的DLL 函数454找不到源代码

455代码源锁定错误

457此键已经与集合对象中的某元素相关

458变量使用的型态是Visual Basic 不支持的459此部件不支持事件

460剪贴板格式无效

未找到方法或数据成员

462远程服务器机器不存在或不可用

463类未在本地机器上注册

480不能创建AutoRedraw 图象

481图片无效

482打印机错误

483打印驱动不支持指定的属性

484从系统得到打印机信息时出错。确保正确设置了打印机485无效的图片类型

486不能用这种类型的打印机打印窗体图象

520不能清空剪贴板

521不能打开剪贴板

735不能将文件保存至TEMP 目录

744找不到要搜寻的文本

746取代数据过长

31001内存溢出

31004无对象

31018未设置类

31027不能激活对象

3

1032不能创建内嵌对象31036存储到文件时出错

31037从文件读出时出错

图片的获取与处理习题

主题五:图片的获取与处理习题 1、如图:用ACDSee处理图①,使之变化到图②的过程中所进行的操作有(C) A、水平翻转和移动 B、调整大小和裁剪 C、水平翻转和调整大小 D、旋转和裁剪 2、关于位图与矢量图,下面正确的说法是 (B) A、位图放大后不易失真 B、矢量图放大后不易失真 C、要减小文件大小,可用位图 D、矢量图是由像素排列组合成的 3、图片文件有多种格式,下面正确的说法是(D) A、BMP格式文件是经过压缩的 B、将一张BMP格式的图片转换成JPG格式后文件变大 C、用GIF格式描述照片效果最佳 D、BMP格式文件属于位图文件 4、在WWW 上浏览和下载信息时,下列说法正确的是(D) A.必须用专门的下载软件才能下载网上的共享软件 B.网络信息只能以网页形式(.htm)另存到本地硬盘 C.无法脱机浏览从网上下载的信息 D.通常情况下,可通过右击网页上的图片,将其另存到本地硬盘 5、小华从因特网上下载了以下四个文件,哪个不属于图像文件(C) A.中国地图.jpg B.小猪.gif C.白雪公主.doc D.清华大学.bmp 6、下列说法中,错误的是(B) A.ACDSee6.0是一款看图工具软件,可用于图片的管理和处理 B.Windows自带的"画图"程序,所保存文件的默认格式是PSD C."我形我速"是简洁好用的相片编辑软件,能将普通的相片处理成精美的艺术照 D.Photoshop采用图层处理技术处理图片 7、刘明去北京观看奥运会的时候拍了很多照片,其中有部分照片被他拍斜了,用ACDSee6.0中的哪种操作可以将其调正?( A) A.旋转/翻转 B.转换文件格式 C.调整大小 D.曝光 8、关于ACDSee6.0软件,下列描述错误的是(D) A.可以通过调整图像的亮度、对比度等来美化图片 B.可以通过转换文件格式命令将bmp格式文件转换为JPG格式文件 C.可以对图像进行任意角度旋转 D.可以通过裁剪工具从原图像中裁剪出椭圆形图像来 9、用ACDSee6.0软件,下列哪种操作可以将BMP格式文件转换成JPG格式文件?( B) A.更改文件扩展名 B.转换文件格式 C.调整大小 D.裁剪 10、如图:用ACDSee6.0处理图①,使之变化到图②的过程中所进行的操作是(C)

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 }

对捕获异常、异常处理的理解

对捕获异常、异常处理的理解 要求:请阅读以下材料作答 程序可能按编程者的意愿终止,也可能因为程序中发生了错误而终止。例如,程序执行时遇到除数为0或下标越界,这时将产生系统中断,从而导致正在执行的程序提前终止。程序的错误有两种,一种是编译错误,即语法错误。如果使用了错误的语法、函数、结构和类,程序就无法被生成运行代码。另一种是在运行时发生的错误,它分为不可预料的逻辑错误和可以预料的运行异常。在编写程序时,应该考虑确定程序可能出现的错误,然后加入处理错误的代码。也就是说,在环境条件出现异常情况下,不会轻易出现死机和灾难性的后果,而应有正确合理的表现。 要求: 1、阐述如何捕获异常。 2、阐述异常处理的基本思想有哪些。 3、阐述异常处理的机制。 一、捕获异常:检查异常与非检查异常 检查异常对方法调用者来说属于必须处理的异常,当一个应用系统定义了大量或者容易产生很多检查异常的方法调用,程序中会有很多的异常处理代码。如果一个异常是致命的且不可恢复并且对于捕获该异常的方法根本不知如何处理时,或者捕获这类异常无任何益处,笔者认为应该定义这类异常为非检查异常,由顶层专门的异常处理程序处理;像数据库连接错误、网络连接错误或者文件打不开等之类的异常一般均属于非检查异常。这类异常一般与外部环境相关,一旦出现,基本无法有效地处理。 而对于一些具备可以回避异常或预料内可以恢复并存在相应的处理方法的异常,可以定义该类异常为检查异常。像一般由输入不合法数据引起的异常或者与业务相关的一些异常,基本上属于检查异常。当出现这类异常,一般可以经过有效处理或通过重试可以恢复正常状态。 由于检查异常属于必须处理的异常,在存在大量的检查异常的程序中,意味着很多的异常处理代码。另外,检查异常也导致破坏接口方法。如果一个接口上的某个方法已被多处使用,当为这个方法添加一个检查异常时,导致所有调用此方法的代码都需要修改处理该异常。当然,存在合适数量的检查异常,无疑是比较优雅的,有助于避免许多潜在的错误。 到底何时使用检查异常,何时使用非检查异常,并没有一个绝对的标准,需要依具体情况而定。很多情况,在我们的程序中需要将检查异常包装成非检查异常抛给顶层程序统一处理;而有些情况,需要将非检查异常包装成检查异常统一抛出。 二、理解异常从中找到处理方式 从应用系统最终用户的角度来看,用户所面对的是系统中所提供的各种业务功能以及系统本身的管理功能。用户并不理解系统内部是如何实现以及如何运行的,与系统开发者存在天然的鸿沟,系统运行对用户来说如同一个黑盒一样。对用户而言,系统所出现的任何异常或错误,都属于系统运行时异常。对于这些异常,有些异常是用户可以理解并能解决的;而另外一些异常是用户无法理解和解决的。当一个系统错误出现时,系统本身需要反馈给用户一种可理解的业务相近的信息,从而用户可以根据这些信息去尽可能解决问题。另一方面,有一类错误属于系统内部运行异常或错误,用户对此类错误根本无能为力。而这类异常同样需要提供足够详细的信息,系统管理员可根据这类异常尽可能解决。一般情况下,如果异常面向系统用户,以系统异常呈现更好。 从系统开发者角度来看,更多的是从系统内部逻辑来看异常。有一部分异常需要内部截获处理,而另外一部分异常对于异常产生源而言无法进行有效处理,从而需要向外抛出异常以待合适的调用者进行处理。对于开发者而言,需要预见异常,并且需要考虑何时处理异常,何时抛出异常,必要时以某种方式记录或通知异常。总而言之,开发者需要通过对系统运行时可能出现的异常尽可能地处理以保证系统的正常运行,并对于无法处理的异常以一种合适的方式记录、通知、呈现以便找到发生异常的原因,从而解决或避免异常。 三、异常处理机制 我们可以认为异常包含三部分:异常Service、异常处理过滤器、系统异常层次定义。

程序调试与常见程序错误

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

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程序结尾缺少括号}。

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的通信。 --------------------------------------------------------------------------------

Java捕获异常处理的常用方法

Java捕获异常处理的常用方法 在Java中,异常情况分为Exception(异常)和Error(错误)两大类,Java 异常通常是指程序运行过程中出现的非正常情况,如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等,对于异常情况的出现,可以采用异常处理,以保证程序可以正常的执行。 Java中定义两种类型的异常和错误: 1. JVM(Java虚拟机) 异常:由JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。 2. 程序级异常:由程序或者API程序抛出的异常。例如IllegalArgumentException 类,IllegalStateException 类。 捕获异常的方法 使用 try 和 catch 关键字可以捕获异常,try/catch代码块中的代码称为保护代码,可以放在异常可能发生的地方,具体用法如下: try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 }

catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。也可以进行多重捕获,具体用法是在try代码块后面跟随多个catch代码块。 catch 语句往往是和finally配合使用,finally关键字用来创建在try代码块后面执行的代码块,无论是否发生异常,finally代码块中的代码总会被执行,因此,在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。 声明自定义异常 在Java中可以自定义异常,在自定义异常类时需注意以下几点: 1. 所有异常都必须是 Throwable 的子类; 2. 自定义检查性异常类,则需继承 Exception 类; 3. 自定义运行时异常类,则需继承 RuntimeException 类。 自定义的异常类和其他任何类都一样,包含有变量和方法。其作用机制均是抛出异常和捕捉异常,一个方法能捕捉异常,一定是Java代码在某处所抛出的异常,异常总是先被抛出,后被捕捉的。

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); 还应注意不能企图用

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、忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要 加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命

关于C++中的异常处理使用方法与技巧

1关于异常处理 1.1为什么要抛出异常 抛出异常的好处一是可以不干扰正常的返回值,另一个是调用者必须处理异常,而不像以前c语言返回一个整数型的错误码,调用者往往将它忽略了。 C++的异常处理确保当程序的执行流程离开一个作用域的时候,对于属于这个作用域的所有由构造函数建立起来的对象,它们的析构函数一定会被调用。 1.2捕获所有异常 有时候,程序员可能希望创建一个异常处理器,使其能够捕获所有类型的异常。用省略号代替异常处理器的参数列表就可以实现这一点: 由于省略号异常处理器能够捕获任何类型的异常,所以最好将它放在异常处理器列表的最后,从而避免架空它后面的异常处理器。 省略号异常处理器不允许接受任何参数,所以无法得到任何有关异常的信息,也无法知道异常的类型。它是一个“全能捕获者”。这种catch子句经常用于清理资源并重新抛出所捕获的异常。 1.3重新抛出异常 当需要释放某些资源时,例如网络连接或位于堆上的内存需要释放时,通常希望重新抛出一个异常。(详见本章后面的“资源管理”一节。)如果发生了异常,读者不必关心到底

是什么错误导致了异常的发生——只需要关闭以前打开的一个连接。此后,读者希望在某些更接近用户的语境(也就是说,在调用链中的更高层次)中对异常进行处理。在这种情况下,省略号异常处理器正符合这种的要求。这种处理方法,可以捕获所有异常,清理相关资源,然后重新抛出该异常,以使得其他地方的异常处理器能够处理该异常。在一个异常处理器内部,使 用不带参数的throw语句可以重新抛出异常: 与同一个try块相关的随后的catch子句仍然会被忽略—throw子句把这个异常传递给 位于更高一层语境中的异常处理器。另外,这个异常对象的所有信息都会保留,所以位于更高层语境中的捕获特定类型异常的异常处理器能够获取这个对象包含的所有信息。 1.4构造函数中的异常 C++规定构造函数抛出异常之后,对象将不被创建,析构函数也不会被执行,但已经创建成功的部分(比如一个类成员变量)会被部分逆序析构,不会产生内存泄漏。但有些资源需要在抛出异常前自己清理掉,比如打开成功的一个文件,最好关闭掉再抛出异常(虽然系统也会把这个资源回收),因为抛出异常之后析构函数不会被执行了。 (1)C++中通知对象构造失败的唯一方法那就是在构造函数中抛出异常;(这句话并不是说我们只有这个方法才能让上层知道构造函数失败,虽然构造函数没有返回值,我们完全可以在构造函数中传入一个引用值,然后在里面设置状态,运行完构造函数之后任然可以知道是否失败,但这种情况下面对象其实还是被构造出来的,只是里面有资源分配失败而已,并且析构函数还是会执行。这和我们构造失败不生成对象的初衷不符。)

Java中如何正确处理异常

1 引言 在JAVA语言出现以前,传统的异常处理方式多采用返回值来标识程序出现的异常情况,这种方式虽然为程序员所熟悉,但却有多个坏处。 首先,一个API可以返回任意的返回值,而这些返回值本身并不能解释该返回值是否代表一个异常情况发生了和该异常的具体情况,需要调用API的程序自己判断并解释返回值的含义。 其次,并没有一种机制来保证异常情况一定会得到处理,调用程序可以简单的忽略该返回值,需要调用API的程序员记住去检测返回值并处理异常情况。这种方式还让程序代码变得晦涩冗长,当进行IO操作等容易出现异常情况的处理时,你会发现代码的很大部分用于处理异常情况的switch分支,程序代码的可读性变得很差。 上面提到的问题,JAVA的异常处理机制提供了很好的解决方案。通过抛出JDK 预定义或者自定义的异常,能够表明程序中出现了什么样的异常情况;而且JAVA 的语言机制保证了异常一定会得到恰当的处理;合理的使用异常处理机制,会让程序代码清晰易懂。 2 JAVA异常的处理机制 当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java 虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch块,在所有的finally块代码被执行和当前线程的所属的ThreadGroup的uncaughtException方法被调用后,遇到异常的当前线程被中止。 3 JAVA异常的类层次 JAVA异常的类层次如下图所示: 图1 JAVA异常的类层次 Throwable是所有异常的基类,程序中一般不会直接抛出Throwable对象,Exception和Error是Throwable的子类,Exception下面又有RuntimeException 和一般的Exception两类。可以把JAVA异常分为三类: 第一类是Error,Error表示程序在运行期间出现了十分严重、不可恢复的错误,在这种情况下应用程序只能中止运行,例如JAVA 虚拟机出现错误。Error 是一种unchecked Exception,编译器不会检查Error是否被处理,在程序中不用捕获Error类型的异常;一般情况下,在程序中也不应该抛出Error类型的异常。 第二类是RuntimeException, RuntimeException 是一种unchecked Exception,即表示编译器不会检查程序是否对RuntimeException作了处理,在程序中不必捕获RuntimException类型的异常,也不必在方法体声明抛出RuntimeException类。RuntimeException发生的时候,表示程序中出现了编程错误,所以应该找出错误修改程序,而不是去捕获RuntimeException。 第三类是一般的checked Exception,这也是在编程中使用最多的Exception,所有继承自Exception并且不是RuntimeException的异常都是checked Exception,如图1中的IOException和ClassNotFoundException。JAVA 语言规定必须对checked Exception作处理,编译器会对此作检查,要么在方法体中

vb可捕获的错误

vb可捕获的错误 private sub fun() on error goto err '出现错误,转移到err . . . exit sub err: on error goto 0 '关闭错误捕获 if err.number=3721 then . . . end if end sub

vb可捕获的错误 可捕获的错误通常发生在应用程序运行时,但也有一些会发生在开发期间或编译时间。可使用On Error 语句与Err 对象来探测并回应可捕获的错误。1 –1000 之间未使用的错误号都是保留给Visual Basic 以后使用的。 代码信息 3没有返回的GoSub 5无效的过程调用 6溢出 7内存不足 9数组索引超出范围

10此数组为固定的或暂时锁定 11除以零 13类型不符合 14字符串空间不足 16表达式太复杂 17不能完成所要求的操作 18发生用户中断 20没有恢复的错误 28堆栈空间不足 35没有定义子程序、函数,或属性47DLL 应用程序的客户端过多

48装入DLL 时发生错误49DLL 调用规格错误 51内部错误 52错误的文件名或数目 53文件找不到 54错误的文件方式 55文件已打开 57 I/O 设备错误 58文件已经存在 59记录的长度错误 61磁盘已满

62输入已超过文件结尾 63记录的个数错误 67文件过多 68设备不可用 70没有访问权限 71磁盘尚未就绪 74不能用其他磁盘机重命名 75路径/文件访问错误 76找不到路径 91尚未设置对象变量或With 区块变量92For循环没有被初始化

第十章 错误处理

第十章错误处理 教学内容: 一、设置错误陷阱 二、编写错误处理程序 教学要求: 了解错误处理、错误陷阱的概念 掌握编写错误处理程序的基本方法 §10.1 设置错误陷阱 1.1设置错误陷阱语句 VB用ON Error语句捕捉程序运行时的错误,以便设置错误陷阱,并利用Err对象及相关的属性、方法确定程序运行时的错误起因,以选择相应的解决措施,实现在线错误处理。语句格式:ON Error语句有3种基本格式 ?格式1:ON Error Goto<行号> ?格式2: ON Error Goto 0 ?格式3: ON Error Resume Next 功能:设置或取消错误捕捉功能。 说明: (1)用语句设置的错误捕捉功能一直起作用,直到另一个语句取消所设置的错误捕捉功能。 (2)格式1设置从指定行号开始的错误处理程序。 (3)格式2取消已设置的错误捕捉程序。 (4)格式3指明发生运行错误时程序跳过错误继续执行,即发生错误时,不对错误做任何处理,直接跳到产生错误语句的下一个语句继续执行。 范例: Private Sub Form_Load() on error goto errline …If n=100 on error resume next End if …Exit sub Errline: …End sub 10.1.2 Resume语句 语句格式:该语句有3种格式。 ?格式1:Resume ?格式2:Resume Next ?格式3:Resume <行号> 功能:该语句放在错误处理程序中,指定执行错误处理程序后继续执行的语句,以便在指定位置恢复程序的执行。 说明:该语句与Return语句类似,但只能用于错误处理程序中,即必须与On Error 语句配套使用。 10.1.3 Err对象和Erl函数 Err对象含有关于运行出错时的错误信息,其属性由错误的生成者设置。该错误生成者可能是Visual Basic系统,也可能是某个对象,或者是程序设计者。 Err对象的默认属性是Number。该默认属性可以直接用对象名称Err表示,所以不必修改以前用函数或语句书写的程序代码。 ?出现错误时, Err返回错误的代码,错误代码的取值范围为1-32767。 ?Erl函数返回错误语句的行号。若发生错误的程序没有行号,则Erl函数总是返回0。虽然Visual Basic中也可以使用行号,但行号只是某一行的标识,且与旧版本Basic语言兼容,与程序的执行顺序无关。

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

第十五章:C语言编程常见错误和程序调试 15.1 C语言编程常见错误 如果提示工具连接错误,则表示KEIL安装程序有问题,重新卸载,并全部删除后重新再进行安装后即可。 15.2 KEILC程序调试常见错误 https://www.doczj.com/doc/bc14402246.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.doczj.com/doc/bc14402246.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

相关主题
文本预览
相关文档 最新文档