2013-01-15 13 views
6

Ich kann das aktuelle Stacktrace mit Thread.currentThread().getStackTrace() abrufen, aber dies gibt mir nur die Klassen in den Anruf involviert. Ist es möglich, die an der Call-Trace beteiligten Objektinstanzen erneut zu erreichen? Vielleicht eine Art Bibliothek, mit der ich die Objekte vom Haufen holen kann?Holen Sie Objekte in Java StackTrace

Ich habe ein Problem, das erfordert, dass ich zurück zu einer Spring Bean, die indirekt das Objekt erstellt, wo ich die Stapelüberwachung anfordern.

UPDATE Wenn es für diesen in Java kein eingebautes Tool Ich suche eine integrierbare Bibliothek, die das für mich in Laufzeit tun.

+0

Das scheint die JVM zu hacken –

Antwort

1

Es ist eine sehr interessante Idee, aber leider in ganz keine, konnte man nicht, es ist unmöglich.

UPD: Einer der Gründe, warum Antwort „nein“ lautet, ist die Tatsache, dass, wenn es möglich sein könnte, dann einige Liste der Verweise auf alle erstellten Objekte vorhanden sein muss. Aber in diesem Fall würde Java GC überhaupt nicht funktionieren.

+2

Das Argument hält nicht: Java hat 'WeakReference' für genau diese Art von Anwendungsfällen. –

+0

Speichert der Heap nicht alle Objektreferenzen, die an einem Aufruf beteiligt sind? Ich meine, die JVM muss die Anrufermethode wieder aufnehmen, sobald der Unterfunktionsaufruf abgeschlossen ist. Ist es unmöglich auf diesen Teil des Heaps zuzugreifen? – NagyI

0

Sie können versuchen housemd. Es wurde von einem Ingenieur @ Alibaba entwickelt und sicher auch in einer Produktionsumgebung verwendet werden, z. taobao.com.

Seine Funktion ist:

Display object field value 
Output invocation stack trace 

Es folgt ein Beispiel-Screenshot: enter image description here

+0

Scheint so, als ob ich mit meiner Frage nicht klar genug wäre. Ich suche nach einer einbettbaren Bibliothek, die das gleiche für mich in Runtime tun kann. – NagyI

0

Versuchen Sie, die Eclipse-Debugger, um den Wert von Objekten in einem bestimmten Verfahren verwendet, um anzuzeigen. Setzen Sie Haltepunkte in die Zeilen, an denen Sie das Programm anhalten möchten.

+0

Ich habe den ursprünglichen Beitrag aktualisiert. – NagyI