没有什么比看到你的代码在调试器中在一个异常方法上崩溃而你没有尝试/捕获它更令人沮丧的了。

有没有一种简单的方法来扫描源代码并标记所有可能引发异常的函数?

内置视觉辅助是否有一些隐藏选项可以将这些功能着色为特定颜色?

谢谢

有帮助吗?

解决方案

我觉得展鹏有一些工具对于这种“异常猎人” 他们试验后收取它。

http://www.red-gate.com/products/Exception_Hunter将/index.htm

其他提示

所有的代码,但最琐碎可以(至少是出存储器,)抛出异常。你可能会更好过防守编写代码,至少有一个全球的try / catch,而不是试图微观其中的代码段会或不会抛出异常。

不,没有办法自动执行此操作,也没有好的方法来获取方法抛出的所有可能异常的列表。以下是一些原因

  1. 考虑隐式抛出的异常,例如可以从任何方法随时抛出 StackOverflowException。您必须假设 CLR 中的任何方法都可以抛出这些类型的异常
  2. 反射和/或委托可以隐藏特定方法中调用的实际代码,因此您无法检查方法的所有可能的代码路径。
  3. 这需要检查 IL 与 IL。元数据。
  4. 在 .Net 中,不需要记录 API 显式抛出的异常

正如其他人说的,我不知道你会发现在C#中这样做,因为不支持checked异常的一个万无一失的方法。

作为一个位的一边,这让我想起了与安德斯·海尔斯伯格采访时讨论“的与检查异常麻烦的”。我并不想火焰检查异常,但建议你阅读安德的背后的C#异常的设计和处理异常的建议方法理由:集中异常处理

我觉得ReSharper的给你提示例外。但由于是C#不支持checked异常的原因,有办法确定的例外。也许代码分析工具,如NDepend的支持这一点。

一切都可以抛出异常。检查MSDN对于可以通过以下方法抛出的异常的列表。

所有非空的方法可以扔在这种或那种形式的异常。如果你关心你亲自产生的异常,你可以用同样的方法框架方法通过XML文档执行从智能感知显示出来,这样的:

/// <summary>  
/// I seem to have written a method to do a thing.
/// </summary>  
/// <exception cref="System.Exception">An unfortunate failure.</exception>
public void DoSomething()
{
   /* ... */
}

任何代码可能会导致异常的它是你的工作,试图预测这个!

有许多第三方工具可以帮助发现一些常见的错误e.g的FxCop和工具,如重构可以提出建议。

有一些工作的,可以帮助你找到与潜在的异常的时刻已经完成。看看到PEX,它可以帮助为您的功能测试:research.microsoft.com/en-us/projects/Pex/(链接似乎在张贴时间将下降)

另一个令人兴奋的面积是代码合同(在.NET未来4 /可作为规格#)。代码合同允许您编写指定必须满足的条件语句。这些可能是之前和你的函数被调用后,你还可以声明不变量。一个条件可能是为价值简单的事!= NULL。然后,这些条件进行了分析,在编译和运行时检查没有代码路径侵犯他们。

正如其他人说,你应该假设的每一行代码可以抛出异常,除非你已经证明,它不能。更好的问题是,“你有什么打算办呢?”

在一般情况下,你不应该在所有捕获任何异常。

当然,一切是一个例外,该规则。这是有道理的捕捉异常才能登录(如果您的环境不为你做的,因为ASP.NET一样)。是有意义的捕捉异常,以便与提供有关上下文更详细另一个异常来代替它:

public int GetConfiguredInteger(string name) {
    string s = null;
    try {
        s = GetStringFromConfigFile(name);
    }
    catch (IOException ex) {
        throw new Exception(String.Format(
            "Error in configuration file foo.config when processing {0}", name),
            ex);
    }
    return int.Parse(s);
}

在调用者可能不知道的是,IOException异常是由配置文件引起的,如果你没有告诉他们。还要注意我怎么忽略不相关的文件I / O的所有异常。特别地,注意,int.Parse甚至不是内部的try / catch块的

有其他类似的异常的数量不多,但捕获异常的基本思想是:不这样做,除非你没有这将是糟糕的。

由少数人提到

异常猎人是一个很好的工具,以帮助这一点。我不知道它是否有领带与<exception> XML的文档注释,这样就可以通过强制执行代码抛出的异常的文档。

我觉得它更令人沮丧的外catch块分解和向下挖我的方式来点实际的,其中的例外happend。

在大多数情况下,如果一个异常被抛出,我没想到它,我发现了一个错误,它更容易解决它,如果它不是由一些做的,没什么异常处理模糊处理。

修改 因为你的例子其实是一个很好的,我仍然不相信,这样的工具可以帮助你。会有,从字面上的每一行代码都可能抛出,你将有一个很难找到的“有趣”的人这么多可能的例外。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top