Come individuare un brutto modo di ri-lanciare un'eccezione C # utilizzando StyleCop o VS2010?

StackOverflow https://stackoverflow.com/questions/2835506

  •  26-09-2019
  •  | 
  •  

Domanda

I miei colleghi sono conditi hacker C ++ di commutazione a .Net. Uno degli errori che fanno involontariamente sta scrivendo codice come questo:

catch(ArgumentExcepttion ae)
{
    // Code here logs the exception message
    // And this is supposed to re-throw the exeception
    throw ae; // as opposed to throw;
    // But, as we all know, doing this creates a new exception with a shorter stack trace.
}

Ho visto questo fatto in molti molti luoghi. Non posso davvero pensare a una situazione in cui tagliare la traccia dello stack sarebbe utile. Penso che dovrebbe essere situazione eccezionale che merita un commento. Correggetemi se sbaglio. Se l'analisi dello stack è di essere tagliata, penso che sia sempre meglio fare:

throw new ArgumentException("text", ae /* inner exc */);

In ogni caso, quello che voglio fare è individuare tutti i casi e dare un avvertimento . Una ricerca espressione regolare non è di alcun aiuto, a causa di questo:

catch(Exception e)
{
    Exception newExc = new Exception("text", e);
    Log(newExc);
    throw newExc;
}

avrei dovuto usare uno strumento come StyleCop (che ho, la versione 4.3.3.0). Sto usando VS2008 per ora, ma sarà il passaggio a VS2010 molto presto.

Ogni pensiero su come realizzare quello che sto cercando?

È stato utile?

Soluzione

FxCop ha una regola per questo: RethrowToPreserveStackDetails

  

Una volta che viene generata un'eccezione, parte   le informazioni porta è il   stack trace. L'analisi dello stack è una lista   della gerarchia chiamata di metodo che   inizia con il metodo che genera il   eccezione e termina con il metodo   che cattura l'eccezione. Se uno   eccezione viene ri-gettato specificando   l'eccezione nella istruzione throw,   l'analisi dello stack viene riavviato al   metodo corrente e la lista del metodo di   chiede tra il metodo originale che   ha generato l'eccezione e la corrente   il metodo è perduto. Per mantenere l'originale   Informazioni traccia dello stack con il   eccezione, utilizzare l'istruzione throw   senza specificare l'eccezione.

Credo Analisi FxCop è costruito per VS2010, ma io non sono sicuro al 100% ...

Questa è la Microsoft link per il download per FxCop .

Altri suggerimenti

Il codice cattura eccezioni inutilmente? Se siete interessati solo accedendo eccezione, allora avete solo bisogno di un fermo al livello più alto del codice (all'ultimo punto possibile, dove si può fare la registrazione). Questo potrebbe seriamente ridurre il numero di catture si deve preoccupare.

Vorrei suggerire di cercare di cattura blocchi che terminano in un lancio ...; invece di finire con lancio;.

Anche se si ottiene qualche falso positivo, è possibile filtrarli a mano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top