2011-10-12 8 views
5

Mi chiedo se esiste uno strumento per trovare le eccezioni non rilevate in C# utilizzando l'analisi del codice statico? Fondamentalmente voglio selezionare un metodoA() e voglio un elenco di tutte le eccezioni generate da methodA() e tutti i metodi chiamati da methodA(). Ho provato ReSharper + Agent Johnson e AtomineerUtils, entrambi falliscono questa semplice operazione.Trova eccezioni non rilevate nel codice C#

Ecco il mio codice di esempio:

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

Lo strumento dovrebbe essere in grado di dirmi (in qualsiasi forma) che il metodo area() getterà ArgumentOutOfRangeException o InvalidOperationException.

+3

vedo ciò che si vuole e dove si sta tentando di andare, ma ancora, si consideri che in molti casi è ok per generare eccezioni dal codice, il fatto è che ogni volta che usi questi metodi dalle tue effettive classi di consumo dovresti prenderli lì, probabilmente è 100% bene che Area getta qualcosa e non ci sarebbe bisogno di una presa lì, ma chi chiama Rectangle.Area dovrebbe ... –

+0

@Davide Piras: Capisco il tuo punto di vista e sei d'accordo con te, ma considera che stai usando una grande libreria di terze parti con una documentazione davvero scadente - trovare eccezioni (o chiamarle "possibilmente gettate") potrebbe facilitare il debugging e lo sviluppo. – Korexio

risposta

6

ho usato un R # Addin una volta quello ha fatto nell'IDE - Eccezionale. Pessima idea, si scopre che si lamenta di ogni singola stringa. Chiamata rapida e casi simili simili che possono effettivamente lanciare, ma che non causeranno problemi.

decidere da sé se ne vale la pena: https://github.com/CSharpAnalyzers/ExceptionalReSharper

+0

Quando uso un programma semplice "Console.WriteLine (new Rectangle(). Area());" con la classe di cui sopra, Exceptional mi dà solo un errore per Console.WriteLine (...) (System.IO.IOException uncaught) ma non per la chiamata a Area() ... L'altro modo sarebbe utile, ma in questo modo non c'è alcun miglioramento ... – Korexio

+1

Non importa, ho trovato il problema: non ho risolto il problema nel metodo Area(), quindi Eccezionale ha ignorato la chiamata. L'aggiunta di documentazione a Area() porta a un avviso in Main (...). – Korexio

+0

Senza il problema descritto in precedenza (http://exceptionalplugin.codeplex.com/workitem/9632) Eccezionale sembra uno strumento utile. Altri suggerimenti per gli strumenti sono benvenuti! – Korexio