例外処理: 再スロー中に元のスタック トレースを維持する
例外の再スローは例外処理の一般的な方法であり、高レベルの抽象化を処理する場合に必要になることがよくあります。 スタック トレースや InnerException を含む元の例外のコンテキストを確実に維持するには、特定のテクニックが重要です。
コード例の比較
2 つのコード スニペットを見てみましょう:
<code class="language-csharp">try { // Some code that might throw an exception } catch (Exception ex) { throw ex; // This approach is problematic }</code>
そして:
<code class="language-csharp">try { // Some code that might throw an exception } catch { throw; // This is the preferred method }</code>
throw;
完全なスタック トレースを保存する鍵は、throw;
を使用することにあります。 catch
ブロック内で、throw;
はスタック トレースを変更せずに、現在キャッチされている例外を 再スローします。 これにより、元の呼び出しスタックが保存され、デバッグが大幅に容易になります。
違いを分析する
2 番目のコード ブロックは汎用の ブロックを使用していますが、例外タイプをキャッチするため精度が低くなります。 ただし、catch
を使用して例外を正しく再スローするため、元のスタック トレースが保存されます。 どちらの方法でも throw;
を使用すると、スタック トレースの保存という点で同じ結果が得られます。throw;
例外再スローのベスト プラクティス
元の例外のスタック トレースの整合性を維持するために、 ブロック内で常に throw;
を利用してください。 catch
は新しいスタック トレースを作成し、エラーの元の原因がわかりにくくなるため、使用しないでください。 このベスト プラクティスに従うと、より堅牢で情報が豊富で、デバッグが容易な例外処理が実現します。throw ex;
以上が例外を再スローするときに例外スタック トレースを保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。