1

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

2 回答 2

3

在调试中苦苦挣扎?

我会说 PB 调试器的行为应该如此。如果您尝试真正掌握调试的概念,则假设您要逐行执行代码。通过给您“超出数组边界”错误,调试器实际上已经证明您的代码中存在潜在的未处理异常(这就是您将 Try-Catch 代码放在那里的原因)。

在调试器实际到达该点之前,不应该抛出异常。这违背了调试器的目的。你明白我的意思吗?

现在,如果您想在调试模式下跳过特定代码块,您需要使用“设置下一条语句”。

在下面修改后的示例代码中,在第 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
于 2010-02-11T21:24:43.067 回答
0

万一有人偶然发现了这个线程——如果在调试时单击“忽略”没有让您通过 TRY...CATCH 块,那么为避免崩溃,请转到 PB 调试器中的调试...异常。为适当的异常类型选择“继续”选项。

于 2011-10-25T15:02:31.777 回答