【问题标题】:PowerBuilder crashes in debug mode by errors inside try/catch blocksPowerBuilder 在调试模式下因 try/catch 块中的错误而崩溃
【发布时间】:2011-01-15 15:10:08
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过在访问数组元素之前检查数组的长度?
  • 是的,这可以解决问题,但是 try/catch 块的目的是什么。在运行时,代码的行为正常,正如预期的那样,但在调试模式下,它的行为就好像 try/catch 语句被忽略了!
  • 经过一些研究,这似乎是已知问题,我不确定是否存在通用解决方法(在运行时使用消息框之外)。 groups.google.co.za/group/…

标签: debugging exception-handling try-catch powerbuilder


【解决方案1】:

在调试中苦苦挣扎?

我会说 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • PB 10.5.2 似乎没有提供这个选项。
    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多