2011-10-12 9 views
5

Zastanawiam się, czy istnieje narzędzie do wyszukiwania niezatłoczonych wyjątków w języku C# przy użyciu analizy statycznej kodu? Zasadniczo chcę wybrać metodęA() i chcę listę wszystkich wyjątków zgłaszanych przez methodA() i wszystkie metody wywoływane przez methodA(). Próbowałem ReSharper + Agent Johnson i AtomineerUtils, oba zawodzą w tym prostym zadaniu.Znajdź niezatłoczone wyjątki w kodzie C#

Oto mój przykładowy kod:

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

Narzędzie powinno być w stanie powiedzieć mi (w dowolnej formie) metody tej dziedzinie() rzuci ArgumentOutOfRangeException lub InvalidOperationException.

+3

widzę, co chcesz i gdzie staramy się iść, ale wciąż uważa, że ​​w wielu przypadkach jest to ok rzucać wyjątki od kodu, faktem jest, że za każdym razem, gdy użyjesz tych metod ze swoich faktycznych klas konsumpcyjnych, powinieneś złapać tam, to prawdopodobnie w 100% dobrze, że obszar coś rzuca i nie potrzebuje tam haczyka, ale kto dzwoni do prostokąta.Area powinna ... –

+0

@Davide Piras: Rozumiem Zgadzam się z Tobą, ale zastanów się, czy używasz dużej biblioteki firm trzecich z naprawdę złą dokumentacją - znalezienie wyjątków (lub nazwijmy je "prawdopodobnie wyrzuconymi") naprawdę ułatwi debugowanie i rozwój. – Korexio

Odpowiedz

6

użyłem R # Addin raz to miało miejsce w IDE - Exceptional. Zły pomysł, okazuje się, że narzeka na każdy pojedynczy ciąg. Wywołanie formularza i podobne typowe przypadki, które mogą rzeczywiście rzucić, ale to nie spowoduje problemów.

Zdecyduj sam, czy warto go: https://github.com/CSharpAnalyzers/ExceptionalReSharper

+0

Kiedy używam prostego programu "Console.WriteLine (new Rectangle(). Area());" z klasą podaną powyżej, wyjątkowa tylko daje mi błąd dla Console.WriteLine (...) (System.IO.IO.Exception wyjątek uncaught), ale nie dla wywołania Area() ... W drugą stronę byłoby to przydatne, ale w ten sposób to nie jest żadna poprawa ... – Korexio

+1

Nieważne, znalazłem problem: Nie rozwiązałem problemu w metodzie Area() - tak Execional zignorowało to połączenie. Dodanie dokumentacji do Area() prowadzi do ostrzeżenia w Main (...). – Korexio

+0

Bez opisanego wyżej problemu (http://exceptionalplugin.codeplex.com/workitem/9632) Wyjątkowe narzędzie wydaje się przydatne. Jeszcze inne propozycje narzędzi są mile widziane! – Korexio

Powiązane problemy