Gibt es Faustregeln darüber, wie viele Catch-Anweisungen pro Quellcodezeile in einer großen Software erwartet werden? Zum Beispiel zeigt Visual Studio in einem Stück Software, das in C# geschrieben wurde, etwa 350 Zeilen mit dem Wort "catch" und cloc Berichte, dass wir etwa 160.000 SLOC, 30.000 kommentierte Zeilen und 15.000 leere Zeilen haben. 160 KB/350 entspricht ungefähr 467 Zeilen Code pro Fanganweisung.Gutes Verhältnis von Catch-Anweisungen zu Codezeilen
Aber nehmen Sie das mit einem Körnchen Salz, weil wir Standard C# Formatierung mit Klammern auf ihren eigenen Zeilen verwenden, also wer weiß, wie viele Zeilen sind nur einzelne Klammern aus der 160k, und dass 160k zählt einige Dateien in der Baum, die nicht mehr in der Anwendung kompiliert werden, etc. Ich könnte vermuten, dass das "nützliche" Verhältnis näher bei 1 Fang pro 400 LOC liegt.
Zumindest nicht zu meiner Überraschung fehlte uns eine halbkritische Ausnahme, die in einem leeren catch-Block gefangen wurde, also gehe ich jetzt durch die Codebasis und drucke zumindest die Ausnahme auf die Debug-Konsole aus als eine vorübergehende Maßnahme oder genauer auf die Ausnahme gefangen werden. Dies wird natürlich die Anzahl der Fänge erhöhen, die wir in der gesamten Anwendung haben, aber wird es uns irgendwo näher an die "akzeptable" Zone bringen? Ich habe keine Ahnung, ob 1 Catch per 467 LOC gut ist, nur okay, oder sogar schrecklich.
Ich bin sehr wohl bewusst warum nicht leere catch-Blöcke zu verwenden. Die anderen/vorherigen Betreuer waren faul. Und da die nächste Version dieses Produkts zeitkritisch ist, habe ich derzeit nicht die Zeit, alle 300 (?) Schlechten Fanganweisungen richtig zu reparieren und den ordnungsgemäßen Betrieb der Software zu verifizieren (natürlich haben wir so gut wie keine Automatisierung Testen, um das zu erleichtern: /).
Ich war nur auf der Suche nach einem "Bauchgefühl", wie oft man versuchen sollte, Try-Fange zu sehen. Es gibt ein paar Antworten, die sagen, dass es kontextsensitiv ist, was ich irgendwie ahnte, mir aber nicht sicher war.
Empty Try-Blöcke sind an sich keine schlechte Idee (d. H. Sie können korrekt verwendet werden). Es ist nur, dass Hauptprogrammierer sie fürchterlich missbrauchen, wo sie den Fehler wirklich protokollieren und Benutzerfeedback zur Verfügung stellen sollten. – Noldorin
Sehen Sie sich eine andere Frage an, die sich mit leeren Try-Catch-Blöcken beschäftigt: [Warum sind leere Catch-Blöcke eine schlechte Idee?] (Http://stackoverflow.com/questions/1234343/why-are-empty-catch-blocks-) eine schlechte Idee). – Lode
Mit Noldorin nicht einverstanden, und würde vorschlagen, dass leere Fangblöcke immer falsch sind. Wenn es einen bestimmten Problemtyp gibt, den Sie wirklich vollständig ignorieren möchten, qualifizieren Sie den Catch irgendwie so, dass er nur die Arten von Fehlern ignoriert, die Sie erwarten. Paarweise: << catch (VerySpecificExceptionType ex) {} >> oder << catch (Exception ex) {if (ex.Message! = "Etwas, was ich erwarte") werfen; } >> Ich bin offen für Gegenbeispiele, wo ein leerer Catch-Block in Ordnung sein könnte, aber ich bin skeptisch :) – pettys