【发布时间】:2012-12-22 13:43:06
【问题描述】:
我在一个相当大的遗留代码库上工作。因为它并不总是保持最佳状态,所以有时会从控制流中使用异常,或者出于各种其他原因。有时这几乎是不可避免的,例如,除了将文件作为图像传入并查看它是否不会引发异常之外,您还如何检查文件是否是有效的 .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 调用。这充其量是烦人的,而且很容易出错
【问题讨论】:
-
试过ReSharper吗?它不会解决您遇到的所有问题,但它使快速重构变得容易得多。
-
@DarthContinent 拥有它。仍然对这种事情没有帮助
-
呵呵,由于没有回应,我可能不得不潜入并制作一个 Visual Studio 插件
-
您可以尝试使用 ReSharper 之类的工具来查找(并在某些情况下删除)这些代码异味。
标签: .net visual-studio debugging exception visual-studio-2012