是否可以忽略Visual Studio中某些行的某些异常?

时间:2013-01-08 16:23:05

标签: .net visual-studio debugging exception visual-studio-2012

我在一个非常大的遗留代码库上工作。因为它并不总是保持最佳状态,所以有时会从控制流中使用异常,或者出于其他原因。并且有时候它几乎是不可避免的例如,除了将文件作为图像传入并查看它是否不会引发异常外,您如何检查文件是否是有效的.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个电话。这很烦人,很容易出错

3 个答案:

答案 0 :(得分:1)

您可以调整中断发生的异常类型。 请参阅调试 - &gt;菜单中的例外情况 http://msdn.microsoft.com/en-us/library/d14azbfh(v=vs.80).aspx

答案 1 :(得分:1)

从我看到你可以结合多种调试技术来改进你的重构过程。

如果可能,您可以将遗留代码的(部分)放入单独的程序集中。使用优化编译并启用"Just my Code" debugging

对于较小的块(方法),您可以使用DebuggerStepThrough属性,因此debbuger不会在那里中断。 对于您的示例,您可以创建一个方法来置换调用FooBar方法的循环,并将[DebuggerStepThrough]放在新创建的方法上。或者你可以重构FooBar来处理异常并在其上放置[DebuggerStepThrough]。

答案 2 :(得分:0)

我开发IntelliDebugger - extension for Visual Studio,这有助于调试C ++ / C#代码。包括异常工作。 IntelliDebugger可以过滤解决方案中未包含的模块抛出的异常(此功能称为“仅从解决方案中断异常”)。也许这个功能对你有用。

在以后的版本中,我们计划添加更好的过滤器和其他功能来处理异常。如果您有任何功能请求或错误报告,请write to me。这将有助于我们专门为您制作产品。