2

最近のプロジェクトでは、多くのデータバインディングと xml シリアル化を使用しています。私は C#/VS2008 を使用しており、デバッグ時に役立つ .NET フレームワークのシンボル情報をダウンロードしました。

私が取り組んでいるアプリには、キャッチされていない例外がスローされた場合に、より見やすいメッセージをユーザーに提示するためのグローバルな「キャッチオール」例外ハンドラーがあります。私の問題は、「キャッチオール」によってキャッチされる前に例外をデバッグできるように、例外->スローをオンにしたときです。フレームワークは、すぐにキャッチされない多くの例外 (ReflectPropertyDescriptor など) をスローするように思われるため、実際にデバッグしようとしている例外はノイズの中で失われます。フレームワークによって引き起こされた例外を取り除き、自分のコードから例外を保持する方法はありますか?

更新:さらに調査し、実際にフレームワークによってスローされる例外を取り除こうとした後 (多くはフレームワークの既知の問題であることが判明しました。例: XmlSerializer がコンストラクターで FileNotFoundException を与える)、私は最終的に自分に合った解決策を見つけました、ツール >> オプション >> デバッグ >> 一般 >> VS2008 でマイ コードのみを有効にするで「マイ コードのみ」をオンにします。

4

3 に答える 3

6

VS2008 の [例外] ダイアログを使用して、どのタイプの例外がどのようにキャッチされるかを微調整できますが、フレームワークが「大量の例外」をスローしている場合は、それも調べてください。例外が処理されたからといって、例外が安全である、またはパフォーマンスが低下していないというわけではありません。

于 2009-11-24T15:23:50.983 に答える
2

フレームワークによってスローされた例外をフィルタリングする 1 つの方法は、独自の例外クラスを から派生させることExceptionです。その後、複数のcatchブロックを使用できます。

try
{
//your code here
}
catch (MyAppException myEx)
{
//Do something with your custom exception
}
catch (Exception ex)
{
//Do something (or nothing) with an exception thrown by the Framework
}
于 2009-11-24T15:23:33.837 に答える
1

キャッチオール例外は適切なプログラミング手法ではないため、これを取り除くことにはしばらくの価値があるかもしれません。たとえば、ファイルの読み取り/書き込みなどの入出力を使用している場合は、より一般的な Exception の代わりに IOException をトラップします。別の例は、XML 操作の XmlException です。キャッチオール ジェネリック Exception を使用すると、特定の例外がジェネリック Exception Handler まで「バブルアップ」する必要があるため、パフォーマンスが低下する可能性があります。

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2009-11-24T15:34:36.780 に答える