PowerBuilder在调试模式下因try / catch块内的错误而崩溃

时间:2010-02-11 08:21:50

标签: debugging exception-handling try-catch powerbuilder

当处于调试模式时,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

2 个答案:

答案 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调试器中的异常。为相应的例外类型选择“继续”选项。