ホームページ > バックエンド開発 > C++ > C# で例外をキャッチして再スローするときに例外スタック トレースを保存するにはどうすればよいですか?

C# で例外をキャッチして再スローするときに例外スタック トレースを保存するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-22 03:41:08
オリジナル
908 人が閲覧しました

How Can I Preserve Exception Stack Traces When Catching and Rethrowing Exceptions in C#?

C# での例外の処理と再スロー: スタック トレースの保存

C# の try-catch ブロックは、堅牢なエラー処理にとって重要です。 ただし、単に例外をキャッチして再スローすると、貴重なデバッグ情報が意図せずに失われる可能性があります。

catch(Exception ex) { throw ex; }

の落とし穴

多くの例で示されているように、例外を直接再スローすると、元のスタック トレースが削除されます。 これにより、エラーの原因を特定することが大幅に困難になり、効果的なデバッグが妨げられます。

いつキャッチして再スローするか

キャッチして再スローする正当な理由があります:

  • 強化されたログ: 例外をキャプチャして詳細なログを追加し、分析のための追加のコンテキストを提供します。
  • 例外のラッピング/変換: 例外の種類を、より高度な処理に適したものに変更します。
  • ターゲットを絞った再スロー: 他の例外を再スローしながら特定の例外タイプを処理し、選択的なエラー管理を可能にします。

ベスト プラクティス: スタック トレースの維持

元のスタック トレースを保持するには、throw ex; を避けてください。代わりに:

<code class="language-csharp">try {
    // Code that might throw exceptions
}
catch (Exception ex) {
    // Add your custom logging here
    // Optionally, wrap or transform the exception
    throw; // Rethrow without modifying the exception object
}</code>
ログイン後にコピー

throw; のみを使用して再スローすると、完全なスタック トレースが保存されます。 例外の特異性の原則に従うことを忘れないでください。正確なエラー処理のために、より広範な例外を捕捉する前に、より具体的な例外を捕捉します。 このアプローチにより、重要なデバッグの詳細を保持しながら、包括的なエラー管理が保証されます。

以上がC# で例外をキャッチして再スローするときに例外スタック トレースを保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート