代码之家  ›  专栏  ›  技术社区  ›  Yorgos

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

  •  1
  • Yorgos  · 技术社区  · 14 年前

    在调试模式下,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 回复  |  直到 14 年前
        1
  •  3
  •   counterflow    14 年前

    在调试中挣扎?

    我认为PB调试器的行为应该是这样的。如果您试图真正理解调试的概念,那么应该一行一行地遍历您的代码。通过给您一个“Array boundary exceeded”错误,调试器实际上已经证明您的代码中存在一个潜在的未处理异常(这就是您将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
  •  0
  •   F3.    13 年前

    如果有人偶然发现这个线程-如果在调试时单击“忽略”无法使您通过TRY…CATCH块,那么要避免崩溃,请转到PB调试器中的Debug…Exceptions。为适当的异常类型选择“继续”选项。