PowerBuilder падает в режиме отладки из-за ошибок внутри блоков try / catch - PullRequest
1 голос
/ 11 февраля 2010

В режиме отладки 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 ]

3 голосов
/ 12 февраля 2010

Борьба с отладкой?

Я бы сказал, что PB Debugger ведет себя так, как должен. Если вы попытаетесь действительно понять концепцию отладки, то постарайтесь шаг за шагом пройтись по вашему коду. Дав вам сообщение об ошибке «Превышение границы массива», отладчик доказал, что в вашем коде есть потенциальное необработанное исключение (именно поэтому вы поместили код 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
0 голосов
/ 25 октября 2011

В случае, если кто-то наткнется на этот поток - если нажатие на «Игнорировать» не проведет вас через блок TRY ... CATCH во время отладки, то во избежание сбоя перейдите к Отладка ... Исключения в отладчике PB , Выберите параметр «Продолжить» для соответствующего типа исключения.

...