Art und Weise automatisch, um zu sehen, welche Funktionen möglicherweise Ausnahme in c # zurückkehren

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

  •  06-09-2019
  •  | 
  •  

Frage

nichts frustrierender, als Ihr Code Absturz im Debugger auf einem Verfahren, um zu sehen, die exceptionned und Sie nicht try / catch es.

Gibt es eine einfache Möglichkeit, durch Ihre Quellen zu scannen und alle Funktionen zu markieren, die möglicherweise Ausnahmen auslösen können?

Ist in der visuellen die Build unterstützt einige versteckte Option hat, diese Funktionen in einer bestimmten Farbe zu färben?

Dank

R

War es hilfreich?

Lösung

Ich denke, redgate etwas ein Werkzeug für diese „Exception Hunter“ haben Sie verlangen für sie nach einem Prozess.

http://www.red-gate.com/products/Exception_Hunter /index.htm

Andere Tipps

Der gesamte Code, aber die banalsten könnten Ausnahmen werfen (aus dem Speicher, zumindest). Du bist wahrscheinlich besser dran Code defensiv zu schreiben, mit zumindest einem globalen try / catch, anstatt zu versuchen, welche Abschnitte des Codes zu Mikromanagement wird oder nicht Ausnahmen werfen.

Nein, es gibt keine Möglichkeit, dies automatisch zu tun, noch ist es eine gute Möglichkeit, eine Liste aller möglichen Ausnahmen durch ein Verfahren geworfen zu bekommen. Hier sind ein paar Gründe, warum

  1. Betrachten implizit geworfen Ausnahmen wie Stackoverflow können jederzeit von jeder beliebigen Methode geworfen werden. Sie müssen davon ausgehen, dass jede Methode in der CLR diese Arten von Ausnahmen auslösen kann
  2. Reflektionen und / oder Teilnehmer können den eigentlichen Code verstecken sich in einer bestimmten Methode aufgerufen wird, so dass Sie nicht alle möglichen Codepfade eines Verfahrens überprüfen können.
  3. Dies würde erfordern, IL vs. Metadaten Inspektion.
  4. In .NET gibt es keine Anforderung Ausnahmen zu dokumentieren, die durch eine API explizit geworfen werden

Wie andere gesagt haben, ich bin nicht sicher, ob Sie dies einen narrensicherer Weg finden in C # zu tun, da nicht überprüften Ausnahmen nicht unterstützt.

Als bisschen ein beiseite, erinnerte mich das an einem Interview mit Anders Hejlsberg diskutieren „ Die Probleme mit Checked Ausnahmen “. Ich versuche nicht zu Flamme Ausnahmen geprüft, aber was darauf hindeutet, dass Sie Ander Gründe für C # 's Ausnahme Design und die vorgeschlagene Art und Weise für den Umgang mit Ausnahmen lesen. Zentralisierte Ausnahmebehandlung

Ich denke, die ReSharper gibt Ihnen auf Ausnahmen Hinweise. Aber aufgrund des Grundes, dass C # nicht geprüfte Ausnahmen nicht unterstützt, ist es, um die Ausnahmen zu bestimmen. Vielleicht Code-Analyse-Tools wie NDepend unterstützen.

Alles kann eine Ausnahme werfen. Überprüfen Sie MSDN für eine Liste von Ausnahmen, die durch ein Verfahren ausgelöst werden können.

Alle nicht-leere Methoden können Ausnahmen in einer oder anderen Form werfen. Wenn Sie Ausnahmen betroffen sind Sie persönlich erstellt haben, können Sie sie von Intellisense in der gleichen Art und Weise Rahmen Methoden über XML-Dokumentation tun anzuzeigen, wie folgt aus:

/// <summary>  
/// I seem to have written a method to do a thing.
/// </summary>  
/// <exception cref="System.Exception">An unfortunate failure.</exception>
public void DoSomething()
{
   /* ... */
}

könnte Jeder Code möglicherweise eine Ausnahme verursacht es Ihre Aufgabe ist es, zu versuchen und zu antizipieren dies!

Es gibt eine Reihe von Tools von Drittanbietern, die mit der Suche nach ein paar häufige Fehler z FxCop und Werkzeuge wie Refactoring helfen können, können Vorschläge machen.

Es gibt einige Arbeiten wurde in dem Moment getan, dass Sie bei der Suche nach potentiellen Ausnahmen unterstützen. Werfen Sie einen Blick in PEX, die Tests für Ihre Funktionen generieren helfen können: research.microsoft.com/en-us/projects/Pex/ (Link unten zum Zeitpunkt der Buchung zu sein scheint)

Ein weiteres spannendes Gebiet ist Code Verträge (kommt in .net 4 / verfügbar als spec #). Code Verträge ermöglichen es Ihnen, Erklärungen zu schreiben, die Bedingungen angeben, die erfüllt werden müssen. Diese können vor sein und nach Ihrer Funktion aufgerufen werden und Sie können auch Invarianten erklären. Eine Bedingung könnte etwas so einfach wie value! = Null sein. Diese Bedingungen werden dann bei der Kompilierung und Laufzeit analysiert keine Codepfade sie verletzen zu überprüfen.

Wie die anderen gesagt haben, sollten Sie jede einzelne Codezeile davon aus, dass eine Ausnahme auslösen kann, es sei denn, Sie haben bewiesen, dass es nicht. Die bessere Frage ist: „Was wollen Sie dagegen zu tun?“

In der Regel sollten Sie keine Ausnahmen überhaupt werden zu kontrollieren.

Natürlich, alles andere ist eine Ausnahme von dieser Regel. Es macht Sinn, eine Ausnahme, um zu fangen es einzuloggen (wenn Ihre Umgebung nicht tun, das für Sie, wie ASP.NET tut). Es macht Sinn, eine Ausnahme, um zu fangen sie mit einer anderen Ausnahme zu ersetzen, die weitere Einzelheiten über den Kontext sieht vor:

public int GetConfiguredInteger(string name) {
    string s = null;
    try {
        s = GetStringFromConfigFile(name);
    }
    catch (IOException ex) {
        throw new Exception(String.Format(
            "Error in configuration file foo.config when processing {0}", name),
            ex);
    }
    return int.Parse(s);
}

Der Anrufer habe nicht bekannt, dass die IOException durch eine Konfigurationsdatei verursacht wurde, wenn man ihnen nicht gesagt hatte. Beachten Sie auch, wie ich alle Ausnahmen ignoriert nicht in die Datei im Zusammenhang I / O. Insbesondere beachten Sie, dass die int.Parse innerhalb des try / catch-Block nicht gerade ist.

Es gibt eine kleine Anzahl von anderen derartigen Ausnahmen, aber die Grundidee zu fangen Ausnahmen ist. Sie es nicht tun, wenn es schlimmer wäre, wenn Sie nicht das

Es gibt einen Reflektor in Exception Finder , die zeigen, welche Ausnahmen durch ein Verfahren ausgelöst werden könnte. Ich habe es nicht verwendet, aber sah ein Beispiel davon in einem .NET-Anwendertreffen.

Es gibt ein Tool gibt, die dies tun können. Sie konnten die Testversion herunterladen und sehen, ob es Ihnen gefällt. Ich glaube nicht wirklich, dass es das nötig sein, aber wenn Sie für ein Unternehmen arbeiten, und sie werden dafür bezahlen Sie vielleicht in sich suchen. Wie gesagt worden ist, bevor es einfach zu viele mögliche Ausnahmen sind, die angehoben werden. Schauen Sie sich Excpetion Hunter

Exception Hunter von ein paar Leuten erwähnt ist ein gutes Werkzeug, mit diesem zu helfen. Ich weiß nicht, ob es eine Verknüpfung mit dem <exception> XML-Doc Kommentar hat, so dass Sie Dokumentation von Ausnahmen von Code ausgelöst erzwingen können.

Ich finde es viel mehr frustrierend innerhalb eines äußeren catch-Block zu brechen und meine Art und Weise graben hin zu den eigentlichen Punkt, an dem die Ausnahme passiert.

Die meiste Zeit, wenn eine Ausnahme ausgelöst wurde, und ich habe es nicht erwarte Ich habe einen Fehler gefunden und es ist einfacher, es zu lösen, wenn es nicht von einer Tun-nichts Ausnahmebehandlung verschleiert wurde.

EDIT: Da Ihre Beispiele ist eigentlich eine gute, den ich noch nicht überzeugt bin, dass ein solches Werkzeug, das Sie helfen würde. Es wäre so viele möglichen Ausnahmen, die buchstäblich jede Zeile Code werfen könnte, dass Sie eine harte Zeit haben, würden die „interessant“ diejenigen zu finden.

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