空の catch ブロックでの例外のデバッグ
質問
空の catch ブロックが大量にある運用アプリケーションをデバッグしています はぁ:
try {*SOME CODE*}
catch{}
デバッガーが IDE でキャッチにヒットしたときに例外が何であるかを確認する方法はありますか?
解決
VS では、catch ブロック内で IDE の Locals 領域を見ると、$EXCEPTION に影響する何かが表示され、キャッチされたばかりの例外に関するすべての情報が得られます。
他のヒント
Visual Studio - [デバッグ] -> [例外] -> [スローされた列] の [共通言語ランタイム例外] のチェックボックスをオンにします。
あなたは書ける
catch (Exception ex) { }
次に、例外がスローされてここでキャッチされたときに、ex を検査できます。
いいえ、それは不可能です。そのコード ブロックには「例外は気にしない」と書かれているからです。次のコードでグローバル検索と置換を実行すると、例外を確認できます。
catch {}
以下の
catch (Exception exc) {
#IF DEBUG
object o = exc;
#ENDIF
}
これにより、実稼働コードでは現在の do nothing catch が維持されますが、DEBUG で実行すると、オブジェクト o にブレーク ポイントを設定できるようになります。
Visual Studio を使用している場合は、例外がハンドルされているかどうかに関係なく、例外がスローされるたびに中断するオプションがあります。例外がスローされると、例外ヘルパー (おそらく VS 2005 以降のみ) が、それがどのような種類の例外であるかを通知します。
打つ Ctrl+オルタナティブ+E をクリックして例外オプション ダイアログを表示し、これをオンにします。
その時点で例外を追加して検査することはできないでしょうか?
@宗派
何も使用されていない場合、コンパイラは Exception ex 値を無視するため、これは機能しません。