Methodenaufrufe protokollieren

Herr Kaiser

Bekanntes Mitglied
Hallo Forum,

ich habe inzwischen ein etwas unübersichtliches Geflecht von Events und Methoden dahingebastelt und fürchte, dass es hierbei zu überflüssigen wechselseitigen Methodenaufrufen kommt. Mir würde zur Analyse des Programmablaufs daher eine Liste helfen, die während der Laufzeit alle durchlaufenen Methoden in der entsprechenden Reihenfolge festthält. Haben die gängigen IDEs (ich benutze NETBEANS) eine entsprechende Protokollfunktion, oder müsste ich ich die Methodennamen per Hand ins System.out println? Oder gibt es andere Analystools, die hier helfen könnten?

Vielen Dank schonmal für eure Hilfe ...
 

Wildcard

Top Contributor
Wenn es dir primär um Performance Probleme geht solltest du einen Profiler verwenden. Wenn du wirklich nur eine Liste mit Methodenaufrufen haben möchtest, dann würde ich zu AOP greifen.
 

AlexSpritze

Bekanntes Mitglied
Hallo,

mit
Java:
Thread.currentThread().getStackTrace()

kannst du dir an jedem Punkt im Programm den Call Stack des aktuellen Threads holen, falls du es etwas low-leveliger haben möchtest ;)
In dem Array müsste das erste oder das letzte Element der Call der aktuellen Methode sein.
 

Herr Kaiser

Bekanntes Mitglied
Danke, Wildcart! Hab inzwischen den Profiler in NetBeans installiert. Muss mich da einarbeiten. Scheint sehr informativ zu sein, komme aber damit offensichtlich nicht an ein Methodenprotokoll heran (oder hab ich diese Möglichkeit nur noch nicht gefunden?).

AOP war meinen Anfängerohren noch neu. Wikipedia sagt mir, dass das ein Programmierparadigma ist. Von daher vermute ich, dass es eher eine Lösung wäre, die man bei einer zukünftigen Projektentwicklung berücksichtigen könnte/sollte (?).

Nach weiterem Rumkooglen denke ich, dass "Tracing" das richtige Stichwort ist. Hat jemand Erfahrungen mit entsprechenden Tools (z. B. DTrace o. a.)?

Die simpelste Möglichkeit wäre vermutlich, wenn ich einfach bei jedem Methodenstart den jeweiligen Namen ausgeben lasse. Müsste ich den dann in jeder Methode hardcoden oder könnte ich da auf irgend eine Variable zugreifen (ähnlich wie "this" bezüglich des aktuellen Objekts, dann aber halt auf die aktuelle Methode bezogen? ...
 

Herr Kaiser

Bekanntes Mitglied
Ein entsprechendes Tool habe ich zwar nicht zum Laufen gebracht, aber mit dem Tip bez. .getStackTrace lässt sich die Sache prima lösen.

Vielen Dank! :)
 

Wildcard

Top Contributor
Mit AOP kannst zB Method Interceptors definieren um alle Methodenaufrufe abzufangen.
Das wird zB benutzt für Performance Messungen, Protokollierung und der gleichen.
Das ganze funktioniert über Byte Code Weaving, der Java Byte Code deines Projekts wird also wahlweise statisch zur Compile Zeit, oder zur dynamisch zur Runtime manipuliert um deine Aspekte einzuweben.
Der große Vorteil von AOP, du kommst sehr schnell und einfach ans Ziel und dein Quellcode muss nicht verändert werden.
 

Ähnliche Java Themen

Neue Themen


Oben