Baut ihr noch Debugmeldungen in euren C++-Source mit ein?
-
Mich würde mal interessieren, ob ihr noch Debugmeldungen direkt in eurem Sourcecode einbindet, welche dann per #define __DEBUG__ oder so mit ausgegeben werden.
-
Ich nicht.
-
Also meinst du Logs?
volkard schrieb:
Ich nicht.
Und Assertions?
-
Ich mache dies häufig. Die Algorithmen haben bei den Übergängen in die nächste Berechnungseinheit oder Formel eine Ausgabe der wichtigsten Variablen. So weiß ich nach längerer Zeit worauf ich achten muss bei den Zwischenschritten.
Zum Beispiel sehe ich gerade das eine Write() Funktion bei mir zu einer kaputten Datei führen. Das Programm stürzt zusätzlich ab. Ohne diese Ausgabe würde ich erst mal auf dem Schlauch stehen, da beim schreiben selbst alles "funktioniert"
-
Welche Möglichkeiten nutzt ihr dafür? Ich bin da sehr interessiert dran, da es mir täglich Begegnet. Wir haben hier immer viele Ausgangswerte, die umgerechnet werden. Das alles im Blick zu behalten ist zu aufwendig. So beschränke ich mich gerne auf wichtige Debug ausgaben um einen ersten Anhaltspunkt zu finden wo ich mit dem debuggen anfangen kann.
-
Bei unseren Projekten arbeiten wir mit einem Trace-System. Die Ausgaben lassen sich noch zur Laufzeit in drei Stufen an- und abschalten. Bei höchster Stufe kommen dann schon mal an die 10000 Ausgaben pro Sekunde zusammen. Das ganze wird in einem (bzw. mehreren) Ringpuffern abgelegt.
Von Debug und Release ist das ganze unabhängig; und beim Kunden läuft die mittlere Stufe, falls es nicht anders eingestellt wird.Um in dem Heuhaufen bei Bedarf die 'richtigen' Meldungen zu finden, haben wir dann noch ein zweites Tool, was uns dabei behilflich ist.
Die Kunst besteht wirklich darin, an den richtigen Stellen im Code die richtigen Ausgaben zu machen. Es ist immer gleichzeitig zu viel und zu wenig Information
Gruß
Werner
-
Hast du zu dem "Trace System" einen Blogpost welcher mich aufklärt was du damit meinst?
-
Arcoth schrieb:
Also meinst du Logs?
volkard schrieb:
Ich nicht.
Und Assertions?
Klar, jede Menge.
-
ichhoffedasistrichtig schrieb:
Hast du zu dem "Trace System" einen Blogpost welcher mich aufklärt was du damit meinst?
Na ja - ein Tracer halt. Im Code stehen so ähnliche Sachen wie
TRACE1( this->Name() << ": heute hat x den Wert " << x ); TRACE2( "Funktion: calc() Operation fertig; result=" << result );Ist der Trace-Level auf 1 eingestellt kommt nur die obere Meldung raus, steht er auf 2 oder 3 so kommen beide.
Gruß
Werner
-
DBagger schrieb:
Mich würde mal interessieren, ob ihr noch Debugmeldungen direkt in eurem Sourcecode einbindet, welche dann per #define __DEBUG__ oder so mit ausgegeben werden.
Eigentlich nur tempporär. Wenn ich in irgendwelchen Tests feststelle, das nicht das passiert, was passieren soll, und ich den Fehler nicht sofort finde, dann kann man schonmal vorkommen, dass ich temporär ein paar "debug-Prints" einbaue. Ich nutze zwar auch einen Debugger, aber er kann mir einige Dinge nicht so schön anzeigen -- oder ich bin zu doof dazu.
Ich arbeite z.Z. eher mit Makefiles, 'nem einfachen Texteditor und GDB -- also keiner schönen IDE, die mir beim Mouse-Rollover anzeigt, was eine Variable gerade speichert. Ich müsste aber beim nächsten Mal nochmal ausprobieren, ob ich auch so eine "print-Funktion" von GDB aus manuell aus aufrufen kann, wenn ich gerade beim Durchsteppen bin oder mir eine Assertion irgendwo um die Ohren geflogen ist.
Ich mag Assertions jedenfalls sehr. Der Debugger hält für mich automatisch an, wenn die Assertion falsch war, und ich kann den Zustand einigermaßen untersuchen.
Ich müsste mir bei Gelegenheit sicher mal den Abschnitt Pretty-Printing aus der GDB-Doku anschauen.