如何解决我怎样才能发现程序丢失的事实?
我正在使用 Progress-4GL Release 11.6,使用 appBuilder 和过程编辑器。
我只是忘记写一个程序,导致我的应用程序“崩溃”(至少,它看起来是这样)。很明显,当我的应用程序“崩溃”时,我并不知道是程序缺失导致的,于是我开始尝试异常处理,结果如下:
这是有效的:
SESSION:ERROR-STACK-TRACE = TRUE. // in order to see the callstack
DO ON ERROR UNDO,THROW:
MESSAGE "This is nonsense: [" INT("blabla") "]" VIEW-AS ALERT-Box.
CATCH eAnyError AS Progress.Lang.Error:
MESSAGE
"Error Number:~t" eAnyError:GetMessageNum(1) "~n"
"Error Text:~t" eAnyError:GetMessage(1) "~n"
"Callstack:~~t" eAnyError:CallStack
VIEW-AS ALERT-Box BUTTONS OK TITLE "Error processing in the CATCH-clause".
END CATCH.
END.
这意味着:发生错误转换的情况(典型的编程问题),捕获异常并在屏幕上显示相应信息。
然而,这个似乎不起作用:
DO ON ERROR UNDO,THROW:
RUN I-do-not-exist.
CATCH eAnyAppError AS Progress.Lang.<xxx>Error:
MESSAGE
"Error Number:~t" eAny<xxx>Error:GetMessageNum(1) "~n"
"Error Text:~t" eAny<xxx>Error:GetMessage(1) "~n"
"Callstack:~~t" eAny<xxx>Error:CallStack
VIEW-AS ALERT-Box BUTTONS OK TITLE "Error processing in the next CATCH-clause".
END CATCH.
END.
供您参考,Progress.Lang.<xxx>Error
条目表示我已尝试处理以下情况:
Progress.Lang.Error
Progress.Lang.ProError
Progress.Lang.AppError
这些似乎都不起作用(代码已编译,但没有发现问题)。
有谁知道如何解决这种问题?
解决方法
简单的答案是升级到 OpenEdge 12,其中可以在 CATCH 块中捕获 STOP 条件:)(它也可用于更新的 OpenEdge 11.7 服务包作为技术预览)。
在 OE11.6 中,您需要以“传统”方式处理 STOP 条件。使用此示例,您可以将 STOP 条件“转换”为一个错误,该错误可以从下一个 blck 开始被捕获。
DO ON ERROR UNDO,THROW
ON STOP UNDO,RETURN ERROR NEW Progress.Lang.AppError ("A Stop Condition has occurred",0).
当您在一个简单的块上使用 DO ON ERROR UNDO,THROW 时,值得指出的是,您可以使用
将 THROW 设为编译单元中任何块的默认值BLOCK-LEVEL ON ERROR UNDO,THROW .
指令位于程序顶部。在 AppBuilder 程序中,Procedure Setting 对话框为 USING 语句提供了一个子对话框 - 您也可以在此处添加 BLOCK-LEVEL 指令。
,如果 I-do-not-exist
是一个外部过程,那么你可以添加守卫。
if not search('I-do-not-exist') eq ? then
run I-do-not-exist.
您可以创建一个包含文件来为您执行此操作
//run.i &prog
if not search('{&prog}') eq ? then
run {&prog}.
您还可以使用 INTERNAL-ENTRIES
属性检查内部过程。类似于下面的内容
if lookup('I-do-not-exist',this-procedure:internal-entries) gt 0 then
run I-do-not-exist.
这些方法需要开发人员将代码添加到每个 RUN 语句中,而捕获 STOP 条件的侵入性较小,范围可能更广。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。