1

次のような try-catch ブロックがあります。

Try
  Listbox1.RemoveRow(Listbox1.ListIndex)
Catch err As OutOfBoundsException
  MsgBox("Derp")
End Try

デバッガーでプロジェクトを実行すると、キャッチしようとしていた正確な行で OutOfBoundsException が発生します。なぜこれが機能しないのですか?!?

4

2 に答える 2

2

デバッガーは、例外が発生するとすぐに、他のコードが実行される前に中断します。これには、Try...Catchブロックのように入力した可能性のある例外処理コードが含まれます。

多くの例外を発生させるコードが少しあり、デバッグするたびにそれをステップスルーする必要がない場合は、核と外科の2つのオプションがあります。

核となるオプションは、例外をまったく中断しないようにデバッガーに指示することです。これには、プロジェクトのごく一部ではなく、プロジェクト全体に適用するという不幸な副作用があります。

外科的オプションは、プラグマディレクティブを使用して、厄介なコードの前後で例外の中断のオンとオフを切り替えることです。

#Pragma BreakOnExceptions Off
try
  Listbox1.RemoveRow Listbox1.ListIndex
catch err As OutOfBoundsException
  MsgBox "Derp"
End
#Pragma BreakOnExceptions On

これは、デバッガーの一部を完全にオフにするよりもはるかに望ましい方法です。注:BreakOnExepctionsディレクティブは、関数が戻り、それが囲むコードに対してローカルになるとすぐに、グローバル設定(オンまたはオフ)に戻ります。

于 2011-04-20T05:14:47.357 に答える
2

デバッガーがその行で中断し、例外を表示するように思えます。ただし、再開を押すと、続行され、例外がキャッチされ、メッセージが表示されます。

おそらく、このリリースでデバッガの動作が変更されたのでしょう。

更新: [プロジェクト] > [例外で中断] に移動して、これを変更できます

于 2011-04-19T08:18:18.213 に答える