注册 登录
编程论坛 VFP论坛

以前网上得到的一段错误诊断代码,结果老是不正确是怎么回事?

琅拿度 发布于 2021-07-07 15:28, 1118 次点击

On Error Do errordo With Error(), Message(), Message(1), Program(), Lineno()

Procedure errordo
Parameter merror, Mess, mess1, mprog, mlineno
Messagebox('错误号: '+Ltrim(Str(merror))+Chr(13)+'错误信息: '+Mess+Chr(13)+'错误代码: '+mess1+Chr(13)+'错误行号: '+Ltrim(Str(mlineno))+Chr(13)+'发生错误的程序名: '+mprog,0,'错误提示...')
Quit
Endproc


这是一段发生错误时,触发的提示框,mess1 显示的根本不是错误行的代码,请问怎么改?
4 回复
#2
sdta2021-07-07 15:31
先对照帮助文件逐个查看命令函数的用法
#3
琅拿度2021-07-07 15:37
以下是引用sdta在2021-7-7 15:31:42的发言:

先对照帮助文件逐个查看命令函数的用法

我查了vfp8的帮助文件,message(1)说的就是代码行,实际的结果返回的根本不是那行代码,不过行号倒是正确的,所以也不太影响排查,只是显示发生错误的“代码内容”不正确
#4
sdta2021-07-07 15:42
Visual FoxPro 9.0 语言参考
MESSAGE( ) 函数
请参阅 示例
 全部折叠 全部展开
以字符串形式返回当前错误信息,或者返回导致这个错误的程序行内容。

 
MESSAGE([1])
 

参数
[1]
当在 ON ERROR 过程中使用 MESSAGE( ) 时,包含这个参数可以返回导致这个错误的程序源代码。 注意:
MESSAGE(1) 在运行时刻中不可用。
 
当不能取得程序源代码时,MESSAGE(1) 返回下列内容之一:
 
当此行是宏替换时,返回整个程序行。
当此行是不含附加子句的命令时,返回该命令。
当程序行是含附加子句的命令时,返回命令以及三个句点 (...) 。

返回值
字符型。 MESSAGE( ) 以字符串形式返回当前错误信息,或者返回导致这个错误的程序行内容。

说明
与 ERROR( ) 不同,MESSAGE( ) 不被 RETURN 或 RETRY 重置。

示例
下面的示例显示 MESSAGE( ) 函数的输出内容。

  复制代码
ON ERROR DO Errhand
*** 下面的行将产生一个错误 ***
USE Nodatabase
ON ERROR     && 恢复系统错误处理程序
PROCEDURE Errhand
? '发生代码的行: ' + MESSAGE(1)
? '错误号: ' + STR(ERROR( ))
? '错误信息: ' + MESSAGE( )
 
#5
琅拿度2021-07-07 15:56
以下是引用sdta在2021-7-7 15:42:15的发言:

我的那句命令是包含宏替换的,但也没返回这个程序行啊,按照以前的经验,大多数都是返回一句“select xxx”,跟发生问题的行一点关系都没有
1