次のような try-catch ブロックがあります。
Try
Listbox1.RemoveRow(Listbox1.ListIndex)
Catch err As OutOfBoundsException
MsgBox("Derp")
End Try
デバッガーでプロジェクトを実行すると、キャッチしようとしていた正確な行で OutOfBoundsException が発生します。なぜこれが機能しないのですか?!?
次のような try-catch ブロックがあります。
Try
Listbox1.RemoveRow(Listbox1.ListIndex)
Catch err As OutOfBoundsException
MsgBox("Derp")
End Try
デバッガーでプロジェクトを実行すると、キャッチしようとしていた正確な行で OutOfBoundsException が発生します。なぜこれが機能しないのですか?!?
デバッガーは、例外が発生するとすぐに、他のコードが実行される前に中断します。これには、Try...Catchブロックのように入力した可能性のある例外処理コードが含まれます。
多くの例外を発生させるコードが少しあり、デバッグするたびにそれをステップスルーする必要がない場合は、核と外科の2つのオプションがあります。
核となるオプションは、例外をまったく中断しないようにデバッガーに指示することです。これには、プロジェクトのごく一部ではなく、プロジェクト全体に適用するという不幸な副作用があります。
外科的オプションは、プラグマディレクティブを使用して、厄介なコードの前後で例外の中断のオンとオフを切り替えることです。
#Pragma BreakOnExceptions Off
try
Listbox1.RemoveRow Listbox1.ListIndex
catch err As OutOfBoundsException
MsgBox "Derp"
End
#Pragma BreakOnExceptions On
これは、デバッガーの一部を完全にオフにするよりもはるかに望ましい方法です。注:BreakOnExepctionsディレクティブは、関数が戻り、それが囲むコードに対してローカルになるとすぐに、グローバル設定(オンまたはオフ)に戻ります。
デバッガーがその行で中断し、例外を表示するように思えます。ただし、再開を押すと、続行され、例外がキャッチされ、メッセージが表示されます。
おそらく、このリリースでデバッガの動作が変更されたのでしょう。
更新: [プロジェクト] > [例外で中断] に移動して、これを変更できます