c++: trace debug statements automatisieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

c++: trace debug statements automatisieren

Beitrag von lisan » 27.09.2004 18:51:08

Hallo,

Ich muss mir staendig in meine Debugstatements den namen der klasse und methode reinschreiben, was mir aufgrund der menge auf die nerven geht. (trotz cut&paste).

Gibts ne methode welche mir den namen der methode an der aktuellen stelle des calls auszugeben ? Ich weiss das konsortium mag sowas mit recht nicht aber ich wuensche es mir.

Kann ich im Falle eines problemes auch ein backtrace machen ?

Gruss,
Arvid.

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Re: c++: trace debug statements automatisieren

Beitrag von Joghurt » 27.09.2004 19:45:00

lisan hat geschrieben:Gibts ne methode welche mir den namen der methode an der aktuellen stelle des calls auszugeben ?
Meinst du vielleicht das __FUNCTION__ Macro?

(GCC hat noch ein __PRETTY_FUNCTION__ Macro, das allerdings nicht ISO C++ ist, aber dafür um einiges lesbarer ;))
Kann ich im Falle eines problemes auch ein backtrace machen ?
Was genau meinst du? Hast du dir schonmal in der libc info die Funktion backtrace (in execinfo.h) angesehen? Funktioniert auch bei c++

Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

Re: c++: trace debug statements automatisieren

Beitrag von lisan » 27.09.2004 20:18:15

Joghurt hat geschrieben:
lisan hat geschrieben:Gibts ne methode welche mir den namen der methode an der aktuellen stelle des calls auszugeben ?
Meinst du vielleicht das __FUNCTION__ Macro?

(GCC hat noch ein __PRETTY_FUNCTION__ Macro, das allerdings nicht ISO C++ ist, aber dafür um einiges lesbarer ;))
Kann ich im Falle eines problemes auch ein backtrace machen ?
Was genau meinst du? Hast du dir schonmal in der libc info die Funktion backtrace (in execinfo.h) angesehen? Funktioniert auch bei c++
Danke, ich verarbeite das erstmal, ob ich damit was anfangen kann.
Mitm bt meinte ich, dass ich im falle eines problemes im code, also eine fehlertollerante reaktion im program ausfuehrlich mit bt darstellen kann.
Ich weiss ja nich immer woher die funktion aufgerufen worden ist.

Gruss

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 14.10.2004 16:18:57

Die GlibC bietet sowas an (geht auch für C++), in der Info-Page für libc ("info libc") such mal nach execinfo.h oder backtrace

tylerD
Beiträge: 4068
Registriert: 10.07.2002 17:34:13
Wohnort: Halle/Saale
Kontaktdaten:

Beitrag von tylerD » 14.10.2004 17:02:15

Also unter Java macht log4j bei mir gute Dienste. Wenn log4cxx [1] auch so gut ist, dürfte es deinen Anfrorderungen wohl nahekommen. Hab ich jedoch noch nie benutz (lange nicht mehr c++ gecodet).

cu

[1] http://logging.apache.org/log4cxx/

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 14.10.2004 17:04:23

Er sucht aber glaube ich eine Möglichkeit, einen Stackbacktrace zu erzeugen.

Maj0r
Beiträge: 476
Registriert: 08.12.2003 14:52:39
Wohnort: Jüchen, Ne
Kontaktdaten:

Beitrag von Maj0r » 15.10.2004 09:46:03

Da log4cxx ein Port von log4j ist, sollte es auch Stacktraces unterstützen.
Ansonsten wäre es kein vollwertiger Port, da log4j das natürlich kann.

Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

Beitrag von lisan » 22.10.2004 12:33:53

Ja, funzt alles wie ihr beschrieben habt, danke.

Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

log4cxx

Beitrag von lisan » 01.11.2004 09:22:14

Das mit den backtraces und fun_names geht schonmal ganz ordendlich.
Ich habe nebenbei log4cxx probiert.
Leider ist die dokumentation extrem duenn geraten.

Ausserdem bekomme ich keine funktionsnamen und zeilennummer angaben.
Anstatt der Ausgabe

Code: Alles auswählen

INFO [main] (test3.cpp:31) - Entering application.
erhalte ich

Code: Alles auswählen

 INFO [1077146944] (:-1) - Entering application.
idee ?

Antworten