debug messages in ein macro auslagern
-
Die Frage ist, ob alle Debug-Ausgaben einfarbig sein sollen... Das waren sie vorher nämlich wahrscheinlich nicht. Insofern brauchen wir auch einen Parameter für die (Vordergrund-)Farbe.
Werd ich entsprechend einbauen.
Ansonsten ist der Vorschlag natürlich wirklich gut
-
In diesem Vorschlag fehlt noch das do { ... } while(0) außenrum. Ansonsten kann es leicht passieren, dass ein if (foo) kdebug("bar"); nicht das erwartete tut.
-
taljeth: kannst du das bitte erläutern?
-
Auch wenn ich nicht taljeth bin
Aus:
if (foo) kdebug("bar");
wird (vereinfacht):
if (foo) settextcolor(3,0); printf("bar"); settextcolor(15,0);
Ohne geschweife Klammern wird nur die erste Zeile als Rumpf angenommen. Steht dort direkt das do-while, wird der ganze Rumpf von diesem genommen.
-
also so?
#ifdef _DIAGNOSIS_ #define kdebug(...) do{settextcolor(3,0);printf(__VA_ARGS__);settextcolor(15,0);} while(0) #else #define kdebug(...) #endif
-
Ja für den Teil, in dem _DIAGNOSIS_ definiert ist. Beim anderen besteht genau das umgekehrte Problem: Bei einem if würde der nächste Befehl plötzlich bedingt werden, obwohl das sicher nicht die Absicht war. Da würde ich also auch wieder ein leeres do {} while(0) hinsetzen.
-
taljeth schrieb:
Ja für den Teil, in dem _DIAGNOSIS_ definiert ist. Beim anderen besteht genau das umgekehrte Problem: Bei einem if würde der nächste Befehl plötzlich bedingt werden, obwohl das sicher nicht die Absicht war. Da würde ich also auch wieder ein leeres do {} while(0) hinsetzen.
es geht doch garnicht so genau darum wie das macro aussehen muß, solang es zentral mit einer veränderung angepasst werden kann ist doch alles ok
btw. das macro sollte einen
#ifdef _DIAGNOSIS_ settextcolor(3,0); printf("dbg message"); settextcolor(15,0); #endif
block ersetzen. da hätte ja sowas auch nicht geklappt oder
if(1) #ifdef _DIAGNOSIS_ settextcolor(3,0); printf("dbg message"); settextcolor(15,0); #endif
aber ja rein mit dem do{}while(0) bzw. {} stören wirds sicher nicht
lg lolo
-
Ach, wisst ihr was: Behaltet eure Bugs einfach, wenn ihr euch angegriffen fühlt, wenn man drauf aufmerksam macht.
-
taljeth schrieb:
Ach, wisst ihr was: Behaltet eure Bugs einfach, wenn ihr euch angegriffen fühlt, wenn man drauf aufmerksam macht.
Ich seh schon ihr habt Spaß
Ich nehme bei mir generell __FILE__ und __LINE__ ins Makro. "dbg message" ist nämlich ziemlich nichtssagend.
Das do while hingegen verstehe ich nicht. Wieso nicht ein einfacher Block?#define kdebug(x) {\ settextcolor(3,0); \ printf("Debug in %s:%d: %s\n", __FILE__, __LINE__, x); \ settextcolor(15,0); \ }
Dann kann man sagen kdebug("Versuche [irgendwas was wahrscheinlich schiefgeht]") und an der Ausgabe sieht man dann auch tatsächlich was.
-
nwp2 schrieb:
Das do while hingegen verstehe ich nicht. Wieso nicht ein einfacher Block?
#define kdebug(x) {\ settextcolor(3,0); \ printf("Debug in %s:%d: %s\n", __FILE__, __LINE__, x); \ settextcolor(15,0); \ }
Wegen
if(...) kdebug("bla"); else printf("blubb");
-
Kann mal jemand den kompletten Ausdruck hinschreiben, wie er jetzt zur Fehlerabsicherung aussehen muss? Zwei mal do/while?
-
Ich glaube, so ist das gemeint:
#ifdef _DIAGNOSIS_ #define kdebug(...) do{\ settextcolor(3,0);\ printf(__VA_ARGS__);\ settextcolor(15,0);\ }while(0) #else #define kdebug(...) do{}while(0) #endif
oder mit nwp2
#ifdef _DIAGNOSIS_ #define kdebug(...) do{\ settextcolor(3,0);\ printf("(von nwp2)Debug in %s:%d: ",__FILE__,__LINE__,);\ printf(__VA_ARGS__);\ settextcolor(15,0);\ }while(0) #else #define kdebug(...) do{}while(0) #endif
Und noch MrX beachten.
//hab keine ahnung, wie man die farben wirklich liest. #define _DIAGNOSIS_ #ifdef _DIAGNOSIS_ #define kdebug(fcolor,bcolor,...) do{\ int ofcolor,obcolor;\ gettextcolors(&ofcolor,&obcolor);\ settextcolor(fcolor,bcolor);\ printf("(von nwp2)Debug in %s:%d: ",__FILE__,__LINE__);\ printf(__VA_ARGS__);\ settextcolor(ofcolor,obcolor);\ }while(0) #else #define kdebug(fcolor,bcolor,...) do{}while(0) #endif
-
Dann könnten wir vlt. besser eine inline-Fkt. nehmen...
-
Mr X schrieb:
Dann könnten wir vlt. besser eine inline-Fkt. nehmen...
-
Mr X schrieb:
Dann könnten wir vlt. besser eine inline-Fkt. nehmen...
Sogar outline. Aber das isses gar nicht mehr so kompliziert.
#ifdef _DIAGNOSIS_ #define kdebug(...) kdebugfunc(__VA_ARGS__) #else #define kdebug(...) ((void(4711)) #endif