我的同事们都是经验丰富的 C++ 黑客,他们转而使用 .Net。他们无意中犯的错误之一是编写如下代码:
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。
关于如何完成我正在寻找的任何想法?