こんにちは、働くC#プログラマーのさんさめです。
例外の原因を調べるとき、
「広範囲にcatchしているせいで、どこで例外が発生しているのか分からない!」
となったことはありませんか?
通常VisualStudioでデバッグ実行しているとき、catchしていない例外があったら、
こういう画面になりますよね。
でも、try~catch構文でcatchされている例外については、
このように中断してはくれません。
そのため、「まさにこのコードで例外になった!」
という場所が分かりません。
しかたない、try~catchを外してビルドし直すか…
間違ってコミットしないようにしなきゃ…
実は、そんな手間のかかることをする必要はありません。
コードはそのままに、
VisualStudio上で簡単に中断できる方法があります。
それが「例外設定」ウィンドウです。
例外設定ウィンドウで任意の例外を強制中断できる
「例外設定」ウィンドウは、
「デバッグ」→「ウィンドウ」→「例外設定」から開くことができます。
「例外設定」は以下のような見た目のウィンドウです。
たとえば、「NullReferenceExceptionが発生したときに必ず止めたい!」
という場合はNullReferenceExceptionのチェックボックスをチェックします。
…といっても、このままでは数が多いので、
検索ウィンドウから絞り込みしましょう。
以下のような手順でチェックをつけます。
すると、catchしている例外であっても、
VisualStudioが中断してくれるようになります。
よく見ると、例外ポップアップの文言も、
「ユーザーが処理していない例外」から「例外がスローされました」に
変わっていて、「ちゃんとcatchされている例外だが、あえて中断している」
ということが分かりますね。
もちろん、デバッグ実行中でも中断するかどうかを変更できます。
気が向いたときにいつでも強制中断させられます。
ちなみに、ツリーの根元である
「Common Language Runtime Exceptions」にチェックを入れれば、
全ての例外を強制中断させることができます。
非常に強力な一方、使いどころを誤ると
鬱陶しいだけなのでご利用は計画的に…。
ちなみに、無事原因が分かり、
「もう止まらなくていいよ」となった場合は、
例外が起きたタイミングで直接ポップアップ上からチェックを外すことができます。
ちなみに、 「例外設定」はVisualStudioの個人の設定なので、
チームの他のメンバーの作業に支障をきたすことはありません。
積極的に使っていきましょう!
例外名すら分からない場合の調べ方
そもそも中断したい例外名が分からないことも、
もしかしたらあるかもしれません。
(たとえばすべての例外をcatchして握りつぶすだけ…
といったコードだと例外名が分かりません)
(信じられませんがそういうコードはたまにあります)
そのような場合は、「出力」ウィンドウを見てみましょう。
例外が発生したタイミングで 例外名が出力されています。
(全然違う文が出ている場合は「出力元」が「デバッグ」になってるか確認しましょう)
あとは「例外設定」でこの例外を止める設定にするだけです。
コードを一切いじる必要はありませんでした。
まとめ
まとめです。
- 「例外設定」ウィンドウを使うとcatchしている例外でも強制中断できる
- 強制中断の設定は気軽にオンオフできる
- 「出力」ウィンドウと併用すれば例外名が分かってさらに便利
これでもう、
「例外の原因を調べるためだけに
コードを一時的に修正してビルドし直す」
といった無駄な作業から解放されます!
「例外設定」ウィンドウ、ぜひ使ってみてくださいね。
最後までお読みいただき、ありがとうございました。
コメント