私の同僚は、.Netに切り替える経験豊富なC++ハッカーです。彼らが意図せずに犯す間違いの1つは、次のようなコードを書くことです。
catch(ArgumentExcepttion ae)
{
// Code here logs the exception message
// And this is supposed to re-throw the exeception
throw ae; // as opposed to throw;
// But, as we all know, doing this creates a new exception with a shorter stack trace.
}
私はこれが多くの場所で行われているのを見てきました。スタックトレースを切り取ることが役立つ状況は、私にはあまり考えられません。それはコメントに値する例外的な状況であるべきだと思います。私が間違っている場合は私を訂正してください。スタックトレースをカットする場合は、次のことを行う方が常に良いと思います。
throw new ArgumentException("text", ae /* inner exc */);
とにかく、私がやりたいのは、そのようなすべてのケースを検出し、警告を出すことです。このため、正規表現検索は役に立ちません。
catch(Exception e)
{
Exception newExc = new Exception("text", e);
Log(newExc);
throw newExc;
}
StyleCop(私が持っているバージョン4.3.3.0)などのツールを使用する必要があります。今はVS2008を使用していますが、間もなくVS2010に切り替えます。
私が探していることを達成する方法について何か考えはありますか?