6.如何设计错误捕捉程序

6

如何设计错误捕捉程序

难度系数 êêê

人气指数 95%

问题详述

在编译成可执行程序后,如何捕捉到出现错误行的代码以及错误编号和错误信息?Visual FoxPro自身提供的错误提示信息实在太少,给分析错误原因带来很大的麻烦。并且不能建立错误日志文件,这在一些大型项目开发中是不允许的。

专家解答

1.几个比较重要的错误信息函数

ERROR()MESSAGE()PROGRAM()LINENO(),函数的具体使用方法请参见相关帮助文档或本书所附光盘的“帮助手册”。

2.设计自己的错误捕捉程序

在了解了Visual FoxPro的错误捕捉函数后,就可以设计自己的错误捕捉程序了,这个错误捕捉程序在主程序中使用如下格式调用。

ON ERROR DO Err.PRG ;

WITH ERROR(), ;

MESSAGE(), ;

MESSAGE(1), ;

PROGRAM(), ;

LINENO(1)

下面是错误捕捉程序Err.prg的代码。

PARAMETERS nError,cMessage,cMessage1,cProgram,nLineno &&接收参数

SET TEXTMERGE DELIMITERS TO &&指定文本合并分隔符为"<<"">>"

SET TEXTMERGE ON &&对文本合并分隔符括起的字段、变量、函数等进行计算

SET TEXTMERGE TO ErrorLog.txt ADDITIVE NOSHOW &&设置为追加到文件尾

\---------------------------------------------------------------------

\<<DATE( )>> <<TIME( )>> 错误记录

\程序标题: <<_Screen.Caption>>

\程序开发版本: <<VERSION(1)>>

DO CASE

CASE _Screen.WindowState = 0

\窗口状态: 普通

CASE _Screen.WindowState = 1

\窗口状态: 最小化

CASE _Screen.WindowState = 2

\窗口状态: 最大化

ENDCASE

\窗口可视: <<IIF(_Screen.Visible= .T. , "可见" , "不可见")>>

\窗口集合数: <<_Screen.FormCount>>

\网络机器信息: <<SYS(0)>>

\

\执行程序: <<JUSTFNAME(SYS(16,1))>>

\执行程序所在目录: <<JUSTPATH(SYS(16,1))>>

\执行程序所在目录磁盘空间: <<DISKSPACE(JUSTDRIVE(SYS(16,1)))>>

\

\默认目录: <<SYS(5)>><<SYS(2003)>>

\默认目录磁盘空间: <<DISKSPACE(SYS(5))>>

\文件搜寻路径: <<SET("PATH")>>

\

\系统临时目录: <<SYS(2023)>>

\虚拟内存池大小: <<SYS(1001)>>

\

\正在使用的工作区: <<Alias()>>

\活动字段: <<VARREAD()>>

\

IF TYPE("_Screen.ActiveForm.Name")="C"

\活动表单: <<_Screen.ActiveForm.Name>>

\表单标题: <<_Screen.ActiveForm.Caption>>

\表单基类: <<_Screen.ActiveForm.BaseClass>>

\表单派生: <<_Screen.ActiveForm.Class>>

\表单派生库: <<_Screen.ActiveForm.ClassLibrary>>

\表单位置: <<SYS(1271, _Screen.ActiveForm)>>

ELSE

\无活动表单

ENDIF

IF TYPE("_Screen.ActiveForm.ActiveControl")="O"

\活动控制: <<_Screen.ActiveForm.ActiveControl.Name>>

IF TYPE("_Screen.ActiveForm.ActiveControl.Caption") = "C"

\控制标题: <<_Screen.ActiveForm.ActiveControl.Caption>>

ENDIF

\控件基类: <<_Screen.ActiveForm.ActiveControl.BaseClass>>

\控件派生: <<_Screen.ActiveForm.ActiveControl.Class>>

\控件派生库: <<_Screen.ActiveForm.ActiveControl.ClassLibrary>>

\控件位置: <<SYS(1271, _Screen.ActiveForm.ActiveControl)>>

ELSE

\无活动控制

ENDIF

\

\错误代号: <<nError>>

\错误信息: <<cMessage>>

\产生错误的位置: <<cProgram>>

\所在行号: <<nLineno>>

\产生错误的代码: <<cMessage1>>

\

\输出内存使用情况 -> MemoryLog.txt

\输出工作环境到 -> StatusLog.txt

SET SAFETY OFF

DISPLAY MEMORY NOCONSOLE TO FILE MemoryLog.txt

DISPLAY STATUS NOCONSOLE TO FILE StatusLog.txt

\

\---------------------------------------------------------------------

SET TEXTMERGE TO

nValue= MESSAGEBOX("程序发生错误!详细信息如下:"+CHR(13)+CHR(13)+;

"错误代号: " + LTRIM( STR(nError) ) + CHR(13) + ;

"错误行号: " + LTRIM( STR(nLineno) ) + CHR(13) + ;

"错误信息: " + cMessage + CHR(13) + ;

"错误代码: " + cMessage1 + CHR(13) + ;

"错误位置: " + cProgram + CHR(13) + CHR(13) + ;

"该错误已经记录到文件:Errorlog.txt,Memorylog.txt,Statuslog.txt";

,2+48,"信息")

DO CASE

CASE nValue=3 &&选择终止时发生

QUIT

CASE nValue=4 &&选择重试时发生

RETRY

CASE nValue=5 &&选择忽略时发生

RETURN

ENDCASE

Visual FoxPro检测到错误发生时,会自动调用这个错误处理程序,如图1-7所示。

1-7 错误捕捉程序捕捉到的信息

并同时把详细的错误信息记录到ErrorLog.txt错误日志文件中,在Visual FoxPro的命令窗口中输入Modify File ErrorLog.txt,如图1-8所示。

但是对于某些错误,Visual FoxPro也捕捉到了,但是并没有触发ON ERROR指定的错误处理程序来记录错误信息。Visual FoxPro提供了一个更加强大的错误捕捉函数AERROR(),其作用是创建一个内存变量数组,数组中包含最近的Visual FoxProOLEODBC的错误信息,详细的使用说明如下:

l 语法

AERROR(ArrayName)

l 参数

ArrayName

指定AERROR()函数创建的数组名。

l 返回值类型

数值型。

l 说明

AERROR()函数创建的数组有7列,并且返回数组的行数。行数由产生的错误类型决定。表1-1描述了Visual FoxPro产生错误时数组中每个元素的内容。当发生Visual FoxPro错误时,数组只有一行。

1-8 错误日志文件ErrorLog.txt

1-1 发生Visual FoxPro错误时AERROR()函数创建的数组元素

元素编号

1

数值型,这是一个错误编号,与ERROR()函数返回的值相同

2

字符型,错误文本信息,与MESSAGE()函数返回的值相同

3

Null值,但是如果错误具有附加错误参数,则包含错误参数的文本信息,与SYS(2018) 的返回值相同

4

Null值,但是在适当的时候,包含发生错误的工作区编号

5

Null值,但是当触发失败时(错误 1539),包含下列数值之一:

1-插入触发失败

2-更新触发失败

3-删除触发失败

6

Null

7

Null

1-2描述了发生OLE错误14271429时各元素的内容。当这些OLE错误发生时,数组只有一行。

1-2 发生OLE错误时AERROR( )函数创建的数组元素

元素编号

1

数值型,为14271429

2

字符型,Visual FoxPro的错误信息文本

3

字符型,OLE错误信息文本

4

字符型,应用程序名(例如,Microsoft Excel

5

Null值或字符,如果能从应用程序的帮助文件中得到更详细的有关错误的信息,则此处包含应用程序中保存这些信息的帮助文件名,否则为Null

6

如果能从应用程序中得到有关信息,此处存放相应帮助主题的帮助文本中的主题标识,否则为Null

7

数值型,OLE 2.0的异常数值

1-3描述了发生ODBC错误1526时各元素的内容。当发生ODBC错误时,数组可能包含两行或更多行,每一行为一个ODBC错误。

1-3 发生ODBC错误时AERROR( )函数创建的数组元素

元素编号

1

数值型,为1526

2

字符型,错误信息文本

3

字符型,ODBC错误信息文本

4

字符型,当前的ODBC SQL状态

5

数值型,ODBC数据源的错误编号

6

数值,ODBC连接句柄

7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值