Clarion 8是否提供任何异常处理服务?我知道try / catch
等try / catch
之类的东西,但是大约10年前就已发布了。我似乎无法找到有关如何从C6到C8中的异常中恢复的任何信息,除非我使用的是Clarion#(又名Clarion.NET),我不是。如果肯定没有像PROP:LastChanceHook
这样的话,那么当有异常被抛出时,有没有可用于没有程序崩溃的技巧或黑客,即使它未被处理?
如果有帮助,我使用的是8.0.0.8778版本。
编辑1:
以下是基本程序的一些示例代码,应该说明功能Hook
,但是,我无法使其工作。当我运行这个程序时,我看到第一条消息“开始”,但没有任何反应。我试过从PROGRAM
INCLUDE('CWEXCPT.INT'), ONCE
MAP
Hook(*ICWExceptionInfo), LONG
Test(LONG,LONG)
END
CODE
MESSAGE('[Sample] Start')
SYSTEM{PROP:LastChanceHook} = ADDRESS(Hook)
Test(10, 0) ! Intentionally causes an exception
MESSAGE('[Sample] After Test')
RETURN ! Tried removing this, no difference
Hook PROCEDURE(*ICWExceptionInfo info)
CODE
MESSAGE('[Sample] Start Hook')
IF info &= NULL THEN RETURN 0 END
Message('An exception!')
RETURN 1 ! 0 = don't kill, anything > 0 = tell RTL to kill the thread
Test PROCEDURE (LONG a, LONG b)
CODE
a %= b
返回0或1,但这也没有什么不同。每次运行时,我都要进入任务管理器并结束程序的进程,因为它没有被杀死。
{{1}}
答案 0 :(得分:2)
是的,看一下道具:帮助中的LastChanceHook。它可以为您的需求提供足够的功能。
在其他情况下,此链接的信息也可能有用: http://clarionsharp.com/blog/tracking-down-those-pesky-gpfs/
在C8的下一个公共版本中(目前是2012年9月27日),该异常显示上的按钮(如上面的链接所示)可以进行一些定制。