我在一个相当大的遗留代码库上工作。因为它并不总是保持最佳状态,所以有时会从控制流中使用异常,或者出于各种其他原因。有时它几乎是不可避免的。例如,除了将文件作为图像传入并查看它是否不会引发异常之外,您还如何检查文件是否是有效的 .ico 图像?
我尽可能地重构这种东西,但很多时候重构成本太高而收效甚微。这些虚假异常在调试时变得非常烦人。我们捕获所有异常以避免我们的程序崩溃,并捕获大多数异常并显示一些对用户更友好的东西。因此,在调试时,如果某段代码抛出一个ApplicationException
,在我们最终得到实际错误之前,可能会抛出 50 个该类型的异常。大多数情况下,这些虚假异常都集中在代码的单个部分(很多时候是一行)。有什么方法可以让 Visual Studio 忽略从该行抛出的异常,但仍然停止在实际问题的异常上?或者我还能做些什么来帮助防止这种调试挫败感?
为了说明我的问题,想象一下这样的事情:
for(int i=0; i<foo; i++)
{
try
{
FooBar(i); //this function throws NullReferenceException sometimes
}catch {} //ignore it because we don't care if it failed
}
....
var tmp=Bar as FooType; //this cast fails so tmp is null
tmp.Meh(); //throws exception here. This is a bug, we should've checked for null
如果你想弄清楚 NullReference 在哪里,你基本上按住 F5 直到你通过FooBar
电话。这充其量是烦人的,而且很容易出错