Wie eine schlechte Art und Weise der Wieder wirft ein C # Exception mit StyleCop oder VS2010 zu erkennen?

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

  •  26-09-2019
  •  | 
  •  

Frage

Meine Kollegen sind erfahrene C ++ Hackern .Net wechseln. Einer der Fehler, dass sie machen unbeabsichtigt das Schreiben von Code wie folgt aus:

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.
}

Ich habe dies in vielen vielen Orten getan gesehen. Ich kann nicht wirklich denken Sie an eine Situation, in der aus dem Stack-Trace Schneiden wäre nützlich. Ich denke, dass außergewöhnliche Situation sein sollte, die einen Kommentar verdient. Korrigieren Sie mich, wenn ich falsch bin. Wenn der Stack-Trace zu schneiden ist, ich denke, es ist immer besser zu tun:

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

Wie auch immer, was ich will tun, ist, alle solche Fälle zu erkennen und eine Warnung . Eine reguläre Ausdruck Suche ist keine Hilfe, weil dieser:

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

würde ich ein Tool wie StyleCop verwenden müssen (was ich habe, Version 4.3.3.0). Ich verwende VS2008 für jetzt, sondern zu VS2010 werden Schale sehr bald.

Alle Gedanken auf, wie zu erreichen, was ich suche?

War es hilfreich?

Lösung

FxCop hat eine Regel für diese: RethrowToPreserveStackDetails

  

Wenn eine Ausnahme ausgelöst wird, einen Teil der   die Informationen, die es trägt, ist die   Stack-Trace. Der Stack-Trace ist eine Liste   der Methodenaufruf Hierarchie,   Das Verfahren beginnt mit, dass die Würfe   Ausnahme und endet mit dem Verfahren   dass die Fangmengen die Ausnahme. Wenn ein   Ausnahme wird wieder geworfen durch die Angabe   die Ausnahme in der throw-Anweisung,   der Stack-Trace wird bei der neu gestartet   Stromverfahren und die Liste der Verfahren   die ursprüngliche Methode aufruft, dass zwischen   wirft die Ausnahme und die aktuellen   Verfahren verloren. Damit das Original   Stack Trace-Informationen mit der   Ausnahme, verwenden Sie die throw-Anweisung   ohne die Ausnahme angeben.

ich glaube, FxCop Analyse wird in zu VS2010 gebaut, aber ich bin nicht 100% sicher ...

Dies ist der Microsoft Download-Link für FxCop .

Andere Tipps

Ist der Code Ausnahmen unnötig zu kontrollieren? Wenn Sie nur in der Anmeldung die Ausnahme interessiert sind, dann brauchen Sie nur einen Haken auf der obersten Ebene des Codes (im letztmöglichen Punkt, an dem Sie die Protokollierung tun). Dies könnte ernsthaft die Zahl der Fänge reduzieren Sie Sorge haben zu.

würde ich vorschlagen, für Catch-Blöcke in einem Wurf enden suchen ...; stattdessen mit Wurf endet;.

Auch wenn Sie etwas falsch positive bekommen, können Sie sie von Hand herausfiltern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top