2011-10-12 12 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(); 
    } 
} 

ツールは、私がかつてのR#アドインを使用ArgumentOutOfRangeExceptionInvalidOperationException.

+3

をし、あなたが行くが、それでも、多くの場合、コードから例外をスローしても大丈夫であることを考慮しようとしているところ、事実であることですあなたの実際の消費クラスからこれらのメソッドを使用するたびに、そこにキャッチする必要があります。Areaが何かをスローし、そこにキャッチする必要はありませんが、Rectangle.Areaを呼び出すのはおそらく100%です... –

+0

@Davide Piras:本当に悪いドキュメンテーションを持つ大きなサードパーティ製のライブラリを使用していると考えている - キャッチされていない(または「おそらく投げられる」)例外を発見すると、デバッグと開発が非常に簡単になります。 – Korexio

答えて

6

スローします(任意の形式で)そのメソッドエリアを()私を伝えることができるはずです。

はここに私のコード例ですそれはIDEでそれをしました - 例外的です。悪い考えは、すべての単一のstring.Format呼び出しと実際にスロー可能性がある同様の一般的なケースについて不平を言うことが判明しますが、それは問題を引き起こさないでしょう。

それはそれの価値がある場合は、自分自身のために決定します。私はあなたが望むものを見るhttps://github.com/CSharpAnalyzers/ExceptionalReSharper

+0

簡単なプログラム "Console.WriteLine(new Rectangle()。Area());"を使用すると、上記のクラスでExceptionalは、Console.WriteLine(...)(System.IO.IOExceptionがキャッチされていません)のエラーを返しますが、Area()の呼び出しのエラーは表示されません。しかし、この方法では全く改善はありません。 – Korexio

+1

問題は見つかりませんでした:私はArea()メソッドで問題を修正しませんでした。 Area()にドキュメントを追加すると、Main(...)に警告が表示されます。 – Korexio

+0

上記の問題がない場合(http://exceptionalplugin.codeplex.com/workitem/9632)例外的なツールは便利なツールのようです。さらに他のツールの提案を歓迎します! – Korexio

関連する問題