2011-01-08 9 views
0

Ich verwende eine Debug-Ausgabe mit printf() in meinen Funktionen, aber die Ausgabe geht an die Konsole beginnend mit den ersten Spalten . Ich möchte die Verschachtelungsebene von Funktionen unterscheiden, indem ich ihre Ausgabezeichenketten jedes Mal einzugreife, wenn ich in die Funktion eintauche (es ist leicht implementiert mit einer static int indentlevel; Variable, die am Anfang einer Funktion inkrementiert wird und als Raumfüllerzählung verwendet wird) und am Ende dekrementiert). Der Fehler besteht jedoch darin, dass, sobald die Ausgabezeile zu lang wird, um sie an der Konsolenkante zu umhüllen, die umschlossenen Teile der Zeilen in Spalte 1 der Konsole beginnen. Sollte ich mich darum kümmern, da, sobald die Ausgabe in eine Datei umgeleitet wird, die Zeilen etwa eine Zeilenlänge haben und die Breiten der Zeilen nur von den Einstellungen der Textdateibetrachter abhängen?Einrückung (und Umbruch-Einrückung) von Debug-Strings ausgegeben von printf()/fprintf() in C-Programm

+0

Aber die Breite der Linie ist nicht konfigurierbar durch die Einstellungen der Konsole? – Cratylus

+0

Durch Ändern der Größe des Konsolenfensters? Es ist immer noch auf maximale Bildschirmbreite beschränkt. – mbaitoff

+0

Nein. Es ist normalerweise in der Pufferbreite. Wenn Sie erhöhen, sind die Zeilen länger. – Cratylus

Antwort

0

Da Sie in eine Textdatei schreiben, sollten Sie nicht von Zeilenumbruch kümmern und lassen Sie den Text-Viewer entscheiden.

Ein Ansatz, den ich verwendet habe, ist in HTML zu schreiben - dann kümmert sich der Browser um Zeilenumbruch. Das einzige Problem ist, dass Sie darauf achten müssen, dass die open/end-Tags richtig ausbalanciert sind, aber Sie brauchen das auch für Ihre indentlevel Variable.

1

Wenn Sie gcc verwenden Sie die -finstrument-Funktionen Compiler-Option verwenden, können eine Instrumentierung Funktion verursachen am Eingang und am Ausgang jeder Funktion aufgerufen werden.

 void __cyg_profile_func_enter (void *this_fn, 
            void *call_site); 
     void __cyg_profile_func_exit (void *this_fn, 
            void *call_site); 

Sie können diese Funktionen definieren, um die Verschachtelungsebene zu verfolgen.

WARNUNG: Ich habe nicht wirklich versucht (noch einen weiteren diese Dinge habe ich nicht ganz herumgesprochen zu!). Ein offensichtlicher GOTHCA - instrumentieren Sie nicht die Instrumentierungsfunktionen !!!

http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Code-Gen-Options.html