2011-10-12 25 views
5

我想知道是否有一種工具可以在C#中使用靜態代碼分析來查找未捕獲的異常?基本上我想選擇一個methodA()並且想要methodA()所拋出的所有異常以及methodA()所調用的所有方法的列表。我試過ReSharper + Agent JohnsonAtomineerUtils,都沒有通過這個簡單的任務。在C#代碼中查找未捕獲的異常

這裏是我的示例代碼:

public class Rectangle 
{ 
    public int Width { get; set; } 
    public int Height { get; set; } 

    public int Area() 
    { 
     CheckProperties(); 
     long x = Width * Height; 
     if (x > 10) 
      throw new ArgumentOutOfRangeException(); 
     return (int) x; 
    } 

    private void CheckProperties() 
    { 
     if (Width < 0 || Height < 0) 
      throw new InvalidOperationException(); 
    } 
} 

該工具應該能夠告訴我(任何形式),該方法面積()將拋出ArgumentOutOfRangeExceptionInvalidOperationException.

+3

我看到你想要什麼,在哪裏,你試圖去,但儘管如此,考慮到在很多情況下,它是確定從代碼拋出異常,但事實是,每次你從實際的消費類中使用這些方法時,你都應該趕上那裏,這可能是百分之百的罰款區域拋出的東西,並不需要在那裏捕捉,但誰叫Rectangle.Area應該... –

+0

@Davide Piras:我明白你的觀點並且同意你的看法,但是考慮到你正在使用一個帶有非常糟糕文檔的大型第三方庫 - 發現未被捕獲的(或者讓我們稱它們爲「可能拋出的」)異常會真正簡化調試和開發。 – Korexio

回答

6

我使用的R#插件一次那是在IDE中做的 - 非常好。糟糕的想法,結果是它抱怨每一個字符串。格式調用和類似的常見情況,可能確實會拋出,但這不會導致問題。

自己決定,如果它是值得的:https://github.com/CSharpAnalyzers/ExceptionalReSharper

+0

當我使用一個簡單的程序「Console.WriteLine(new Rectangle()。Area());」與上面給出的類,異常只會給我一個錯誤的Console.WriteLine(...)(System.IO.IOException未捕獲),但不是對Area()的調用......另一種方法將是有用的,但這種方式根本沒有任何改進... – Korexio

+1

沒關係,發現問題:我沒有修復Area()方法中的問題 - 所以Exceptional忽略了調用。向Area()添加文檔會導致Main(...)中出現警告。 – Korexio

+0

如果沒有上述問題(http://exceptionalplugin.codeplex.com/workitem/9632)Exceptional看起來像一個有用的工具。歡迎其他工具建議! – Korexio