当处于调试模式时,powerbuilder(版本10.5)会抛出应用程序执行错误并终止应用程序,因为try / catch块中的语句引发了错误?
例如,下面的第3行抛出,“超出数组边界”错误,应用程序终止。如何克服此(处理)错误并调试其余代码?
try
// lstr_passed_values = message.powerobjectparm
ls_symv_no = gstr_symv_passed_values.is_values[1]
if isnull(ls_symv_no) or ls_symv_no = "" then
is_symv_no="%"
else
is_symv_no = ls_symv_no
gstr_symv_passed_values.is_values[1]=""
end if
catch (throwable err)
is_symv_no="%"
end try
答案 0 :(得分:3)
挣扎于调试?
我会说PB调试器的行为应该如此。如果你试图真正掌握调试的概念,那么就应该逐行逐步完成代码。通过给出“超出数组边界”错误,调试器实际上已经证明代码中存在潜在的未处理异常(这就是您在其中放置Try-Catch代码的原因)。
在调试器实际到达该点之前,不要抛出异常。这违背了调试器的目的。你知道我的意思吗?
现在,如果要在调试模式下跳过特定代码块,则需要使用“Set Next Statement”。
从下面修改的示例代码中,在第1行设置断点。一旦调试器到达断点,右键单击“编辑变量”字符串“is_symv_no”。然后在第14行移动点光标并单击“设置下一个语句”。这将绕过整个try-catch例程(第2-13行),并允许你的程序继续。
1 ls_symv_no = ""
2 try
3 // lstr_passed_values = message.powerobjectparm
4 ls_symv_no = gstr_symv_passed_values.is_values[1]
5 if isnull(ls_symv_no) or ls_symv_no = "" then
6 is_symv_no="%"
7 else
8 is_symv_no = ls_symv_no
9 gstr_symv_passed_values.is_values[1]=""
10 end if
11 catch (throwable err)
12 is_symv_no="%"
13 end try
14 return
答案 1 :(得分:0)
如果有人偶然发现这个帖子 - 如果点击“忽略”在调试时没有通过TRY ... CATCH块,那么为了避免崩溃,请转到Debug ... PB调试器中的异常。为相应的例外类型选择“继续”选项。