2016-03-22 8 views
0

Ich versuche, eine Antwort auf eine einfache Frage zu finden, und bisher kein Glück.Verwenden von Java-Klassenlader, um Stack-Trace zu bekommen

Die Frage ist: can i use java class loader (implement a new class loader) to investigate the stack trace ?

genauer zu sein,

Ich spreche über scenerio, in dem ich auf einige Code, um einen Test leite, und ich möchte den Stack-Trace verwenden, um zu bestimmen, Welche der Testklassen führt diesen Code aus? (Eine Art und Weise liegt auf den nächsten Test in Stack-Trace zu sehen)

eine weiterer Fortschritt Idee, ist die Class-Loader zu verwenden, um die nächsten „Testverfahren“ zu finden, die aktuellen Code lief ..

Edit:

Ich habe keinen Zugriff auf die Tests, die den Code noch den Code selbst ausführen. Deshalb denke ich über den Klassenlader .. -> Ich kann einen Klassenlader ausführen, aber ich kann nicht ändern Anwendungscode oder Anwendungstestcode .. (deshalb kann ich Thread.getStackTrace() nicht verwenden).

+0

Es ist schwer zu verstehen, was Sie fragen. Sie fragen, wie Sie herausfinden können, in welcher Klasse sich ein Codeabschnitt befindet? –

+0

der normale Stacktrace sollte Ihnen bereits die Methoden-Kette, die – SomeJavaGuy

+0

genannt wird sagen, Werfen Sie einen Blick auf http://StackOverflow.com/Questions/1069066/get-current-Stack-Trace-in-Java, das/s eine Möglichkeit zu bekommen der Stack-Trace zur Laufzeit. – Philipp

Antwort

1

Um aktuelle Stack-Trace zu erhalten, können Sie Thread.getAllStackTraces() Methode verwenden - es gibt Ihnen Map-Objekt mit Thread-Stacks. Sie können diese Karte mit Thread.currentThread() Schlüssel verweisen.

UPDATE

Wenn Sie Stack-Spuren außerhalb des Host/Testanwendung beobachten Sie einfach jstack util verwenden, um herauszufinden, was bestimmten Thread Zielcode ausgeführt wird.

Sie können auch Byte-Code-Tracing-Tool wie BTrace verwenden. Mit BTrace können Sie Methodenaufrufe innerhalb von anderen Methoden verfolgen. Bitte werfen Sie einen Blick auf diese tutorial. Ich denke, dass Sie besonders an dem Teil interessiert wären, der @Location Parameterverwendung von @OnMethod Annotation beschreibt.

Verwandte Themen