C Debug C | Debug Level | GDB | Valgrind

hell-student

Lieutenant
Registriert
Nov. 2007
Beiträge
671
Hallo Zusammen,

ich habe mir nun schon mehrere Internetseiten durchgelesen zu obigen Themen und wollte von euch etwas Feedback haben wie ihr euere Programme gut debugt. Ich implementiere garde für meine Diplomarbeit und so langsam wird es vom Code her einfach wichtig gewisse Dinge zu debuggen. Bei GDB habe ich gesehen, dass man hier sehr gut einzelne Breakpoints setzten kann (sowohl Zeilen, als auch Funktionen (in Unterfunktionen reinspringen kann) usw.

Macht ihr ein #define DEBUG am Anfang des Programmes oder pro Funktion im Programm? Habt ihr hier gute Tipps oder Internetseiten wo ich mir das nochmal genauer anschauen kann (oder Buchtipps -> Unibib ist nicht weit weg =)).

Mein Programm ist teilweise relativ linear aufgebaut, daher denke ich, dass gerade mir die Breakpoints sehr helfen. Man kann sich hierbei ja dann die genaue Belegung von Variablen anschauen. Ich möchte den Code übersichtshalber auch nicht zuklatschen mit Debugausgaben, aber da ich sehr viel berechne, und spätere Berechnungen auf Ergebnisse vorheriger Berechnungen zurückgreifen, muss ich teilweise viele Information für mich visuell ausgeben, damit ich nachvollziehen kann, dass auch alles korrekt funktioniert. Momentan arbeite ich unter Linux (Kubuntu 12.??) mit Eclipse mit CDT. Sollte ich statt GDB lieber Entwicklungsinterne Debugging Features benutzen (denke aber auch diese bauen auf GDB auf?).

thx
 
Verstehe die Frage mit dem #define DEBUG nicht ganz? Wenn du einen Breakpoint setzten willst, dann setzt du ihn. Wenn du ihn nicht mehr brauchst, deaktivierst oder löschst du ihn (sollte mittlerweile so gut wie jede IDE unterstützen).

Debug-Ausgaben finde ich vor allem bei langwierigen Berechnungen ziemlich hilfreich, da man Fehler so wesentlich einfacher auf die Schliche kommt.
Kannst sie ja nur auf der Debug-Konsole ausgeben lassen, dann musst du dein eigentliches Programm nicht zusätzlich zumüllen.
 
Verstehe die Frage mit dem #define DEBUG nicht ganz?

Ich habe schon öfters in Programmen sowas gesehen:

Code:
#define DEBUG 1
int tueirgendwas(int lalala)
{
int a, b, c;

a = b+c + lalala;

if (DEBUG) {
printf("%i \n", a);
}

return a;
}

oder das #define DEBUG wird an den Anfang geschrieben, gilt also für jede Funktion und somit wird alles ausgeprintet. Ich möchte halt ungern alles zumüllen, aber wenn dies sehr gut mit eclipse geht, dann werd ich das mal damit versuchen. Momentan führe ich mein Programm einfach per terminal aus und bei Fehlern schau ich mit Valgrind /GDB nach.
 
Im Normalfall geht das so:
Code:
int tueirgendwas(int lalala)
{
int a, b, c;

a = b+c + lalala;

#ifdef DEBUG
  printf("%i \n", a);
#endif

return a;
}

Und dann kompilieren mit -DDEBUG. Ohne dieses Flag, werden die Debug-Programmteile vom Präprozessor komplett verworfen und nicht mit kompiliert.
Da man meistens mehr debuggt als die endgültige Version ausliefert, benutzen viele ein NDEBUG-Makro und ein #ifndef NDEBUG. Dann setzt du -DNDEBUG nur bei einem Release-Build.
 
Zurück
Oben