トップ回答者
x64アプリケーションのデバッグにてtry~catchを意図的に発生させる方法

質問
回答
-
どうも目的がつかめませんが、「try-catchを意図的に発生させる」のではなく、「デバッグセッション実行中に特定のtryブロック内において、例外を任意のタイミングでスローさせたい」ということではないですか? しかしいったいなぜそのために「ブレークポイントのドラッグ&ドロップ」やエディットコンティニュが必要なのか(どうやって使おうとしているのか)不明ですが……
ちなみに「ブレークポイント」ではなく「現在のステートメント」であればx86/x64ともにデバッグセッション中にドラッグ&ドロップで移動できるはずですが、移動させたいのは本当に「ブレークポイント」のほうですか?
下記のようなメソッドの呼び出しコードを、tryブロック内の適当な箇所に仕込んでおいて、あとはif文が記述されている行にブレークポイントを置き、実行時にthrowsパラメータの値をデバッガーでtrueに変更すれば(もしくは現在のステートメントをifブロック内に移動すれば)例外がスローされる、ということは実現できるのではないでしょうか。メソッド内部では例外を処理していないので、呼び出し元に伝播します。また、このメソッドはConditional属性により、デバッグビルドでのみ有効になり、リリースビルドでは呼び出し自体が除去されます。
[System.Diagnostics.Conditional("DEBUG")] private static void ThrowExceptionIfDebugAnd(bool throws = false) { if (throws) { throw new Exception("Intentional exception."); } }
いずれにせよ、質問するときは実現したいことをもっと正確に分かりやすく伝える努力をしましょう。
すべての返信
-
どうも目的がつかめませんが、「try-catchを意図的に発生させる」のではなく、「デバッグセッション実行中に特定のtryブロック内において、例外を任意のタイミングでスローさせたい」ということではないですか? しかしいったいなぜそのために「ブレークポイントのドラッグ&ドロップ」やエディットコンティニュが必要なのか(どうやって使おうとしているのか)不明ですが……
ちなみに「ブレークポイント」ではなく「現在のステートメント」であればx86/x64ともにデバッグセッション中にドラッグ&ドロップで移動できるはずですが、移動させたいのは本当に「ブレークポイント」のほうですか?
下記のようなメソッドの呼び出しコードを、tryブロック内の適当な箇所に仕込んでおいて、あとはif文が記述されている行にブレークポイントを置き、実行時にthrowsパラメータの値をデバッガーでtrueに変更すれば(もしくは現在のステートメントをifブロック内に移動すれば)例外がスローされる、ということは実現できるのではないでしょうか。メソッド内部では例外を処理していないので、呼び出し元に伝播します。また、このメソッドはConditional属性により、デバッグビルドでのみ有効になり、リリースビルドでは呼び出し自体が除去されます。
[System.Diagnostics.Conditional("DEBUG")] private static void ThrowExceptionIfDebugAnd(bool throws = false) { if (throws) { throw new Exception("Intentional exception."); } }
いずれにせよ、質問するときは実現したいことをもっと正確に分かりやすく伝える努力をしましょう。