1

デバッグ モードの場合、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
4

2 に答える 2

3

デバッグに苦労していますか?

PB Debugger は正常に動作していると言えます。デバッグの概念を本当に理解しようとする場合は、コードを 1 行ずつステップ実行することをお勧めします。「配列の境界を超えました」というエラーを表示することで、デバッガーは実際に、コードに未処理の例外が潜在的に存在することを証明しています (これが、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 に答える