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

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

Mary-Kate Olsen
リリース: 2025-01-25 20:04:15
オリジナル
542 人が閲覧しました

How Can I Preserve Exception Stack Traces When Re-Throwing Exceptions?

例外処理: 再スロー中に元のスタック トレースを維持する

例外の再スローは例外処理の一般的な方法であり、高レベルの抽象化を処理する場合に必要になることがよくあります。 スタック トレースや 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 サイトの他の関連記事を参照してください。

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