CS.EXCEPT.RETHROW
例外の再スロー中にスタックトレースのクリアを避けます。
キャッチされた例外を再スローすることは、例外が再スローされ、スタックトレースがクリアされるため、避けてください。その一方で、単純な "throw;" は、キャッチされた式を再スローし、スタックトレースを保持します。追加情報を追加し、新しい例外をスローする必要が本当にある場合は、新しくスローされた例外で、元の例外を InnerException として保持する必要があります。
脆弱コード例
コピー
public class Class1
{
public void method1()
{
try
{
// Code
}
catch (Exception ex)
{
// Exception handling code
throw ex; // Violation
}
}
}
修正コード例
コピー
public class Class1
{
public void method1()
{
try
{
// Code
}
catch (Exception ex)
{
// Exception handling code
throw; // FIXED
}
// alternative
try
{
// Code
}
catch (Exception ex)
{
// Exception handling code
Exception ex2 = new Exception("more info", ex);
throw ex2; // FIXED, added more info to the exception
}
}
}