Frage

Ich bin die Schaffung eines Systems. Was ich will, ist wissen, ob ein msg nicht unterstützt wird, was es tun soll? soll ich nicht unterstützte msg werfen sagen? soll ich zurückkehren 0 oder -1? oder sollte ich einen errno (Base-> errno_). Einige Nachrichten i kümmern würde nicht, wenn es ein Fehler (wie setBorderColour). Andere ich würde (addText oder vielleicht sparen, wenn ich ein cmd erstellen speichern).

Ich möchte wissen, was die beste Methode für 1) Codierung schnell 2) Debug-3), die sich und Wartung. Ich kann das Debuggen 3., seine schwer zu debuggen ATM, aber das ist machen bc es eine Menge ist Code fehlt, die ich ausfüllen abgepfiffen. Die tatsächlichen Fehler Arent schwer zu beheben. Was ist der beste Weg, um den Benutzer zu informieren, gibt es einen Fehler entdeckt?

Das System funktioniert so etwas wie dieses, aber nicht genau das gleiche. Dies ist C-Stil und mycode hat eine Reihe von Inline-Funktionen, die Wrap setText (const char * text) {to msg (this, esettext, Text)

Base base2, base;
base = get_root();
base2 = msg(base, create, BASE_TYPE);
msg(base2, setText, "my text");
const char *p = (const char *)msg(base2, getText);
War es hilfreich?

Lösung

Generell gilt: Wenn es C ++, bevorzugen Ausnahmen, es sei denn die Leistung kritisch ist oder es sei denn, Sie können in einer Umgebung (zum Beispiel eine eingebettete Plattform) ausgeführt werden, die keine Ausnahmen nicht unterstützt. Ausnahmen sind bei weitem die beste Wahl für die Fehlersuche, weil sie sehr auffällig sind, wenn sie auftreten und werden ignoriert. Ferner sind Ausnahmen selbsterklärend. Sie haben ihre eigenen Typnamen und in der Regel eine Nachricht enthalten, die den Fehler erklärt. Rückgabecodes und errno erfordern separate Codedefinitionen und eine Art von Out-of-Band Art und Weise der Kommunikation, was die Codes bedeuten, in einem bestimmten Kontext (z Manpages, Kommentare).

Für schnell Codierung, Rückgabecodes sind wahrscheinlich einfacher, da sie sich nicht mit möglicherweise Ihre eigenen Ausnahmetypen definiert, und oft der Fehlerprüfcode ist nicht so ausführlich wie mit Ausnahmen. Aber natürlich ist die große Gefahr besteht, dass es viel einfacher ist zu leise Fehlerrückgabecodes zu ignorieren, was zu Problemen, die nicht bemerkt werden können, bis alles gut, nachdem sie auftreten, so dass die Fehlersuche und Wartung einen Alptraum.

Versuchen Sie jemals mit errno zu vermeiden, da es sehr fehleranfällig ist selbst. Es ist ein globaler, so dass Sie wissen nie, wer es ist, das Zurücksetzen und es ist am meisten definitiv nicht Thread-sicher.

Edit: Ich habe gerade realisiert man eine errno Membervariable und nicht die C-Stil errno gemeint. Das ist besser, dass es nicht global ist, aber Sie müssen noch zusätzliche Konstrukte, um es sicher zu machen Thread (wenn Ihre Anwendung multi-threaded ist), und es behält alle Probleme eines Return-Code.

Andere Tipps

einen Fehlercode zurückkehrend Disziplin erfordert, weil der Fehlercode explizit überprüft werden muss, und übergeben dann nach oben. Wir schrieben ein großes C-basiertes System, das diesen Ansatz verwendet, und es dauerte eine Weile, um all „verloren“ Fehler zu entfernen. Wir entwickeln schließlich einige Techniken, um dieses Problem zu fangen (wie den Fehlercode in einem Thread-globale Lage zu speichern und auf der obersten Ebene überprüft, um zu sehen, dass der zurückgegebenen Fehlercode den gespeicherten Fehlercode angepasst).

Exception Handling ist einfacher, schnell zu codieren, weil, wenn Sie Code schreiben und Sie sind nicht sicher, wie der Fehler zu behandeln, können Sie einfach nach oben ausbreiten lassen (Sie unter der Annahme, sind nicht mit Java, wo Sie zu tun haben, mit geprüfte Ausnahmen). Es ist besser für das Debuggen, weil Sie einen Stack-Trace, wo die Ausnahme aufgetreten bekommen können (und weil Sie in Top-Level-Exception-Handler aufbauen können Probleme zu fangen, die an anderer Stelle gefangen haben sollten). Es ist besser für die Pflege, denn wenn man richtige Dinge getan hat, werden Sie von Problem schneller benachrichtigt werden.

Es gibt jedoch einige Aspekte, mit Ausnahmebehandlung, und wenn Sie es falsch ist, werden Sie schlechter dran sein. Kurz gesagt, wenn Sie Code schreiben, dass Sie nicht wissen, wie eine Ausnahme zu behandeln, sollten Sie es lassen propagieren auf. Zu viele Programmierer Trap Fehler nur die Ausnahme zu konvertieren und dann erneut auslösen, was zu Spaghetti Ausnahmecode, der manchmal Informationen über die ursprüngliche Ursache des Problems verliert. Dies setzt voraus, dass Sie Exception-Handler auf der obersten Ebene (Einstiegspunkte) haben.

Persönlich, wenn es um Ausgang Grafik kommt, fühle ich mich ein stilles versagen ist in Ordnung. Es macht einfach Ihr Bild falsch.

Grafikfehler sind super einfach irgendwie zu erkennen.

Ich persönlich würde eine errno auf Ihre Basis-Struktur hinzufügen, wenn es rein ist ‚C‘. Wenn diese C ++ würde ich eine Ausnahme aus.

Es hängt davon ab, wie ‚fatal‘ diese Fehler sind. Muss der Benutzer wirklich die Fehler sehen, oder ist es auch für andere Entwickler Erbauung?

Für Wartbarkeit müssen Sie deutlich die Fehler zu dokumentieren, dass und beinhalten eindeutige Beispiele für die Fehlerbehandlung auftreten können.

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