2015-07-19 20 views
8

Ich schreibe ein Java-Framework, für eine Klassendatei, sample.class, generiert es eine Proxy-Datei sample_proxy.class. Wenn sample.testMethod() aufgerufen wird, wird sample_proxy.class aufgerufen. Ich habe bereits eine Eclipse-Plugin macht die Breakpoint Arbeit zu machen, enter image description hereÄndern Sie den Inhalt der Debug-Ansicht in Eclipse

Wenn ich von Main.java starten, und einen Haltepunkt in sample.testMethod() mache, unter den Stapeln wie folgt aussieht: Main.main -> Probe .proxy_method -> sample_proxy.testMethod.
Gibt es eine Möglichkeit, den Proxy anzuzeigen, wie: Main.main -> sample.testMethod?

+0

Sie können Probe als die abstrakte Klasse machen, dann sollte es nicht den Proxy zeigen .. –

Antwort

0

Was Sie tun möchten, ist möglich, aber ein bisschen komplizierter. Zunächst einmal gibt es keine Möglichkeit, den StackTrace eines laufenden Programms zu ändern. Also Thread.currentThread().getStackTrace() ist nicht der Weg zu gehen.

Ich schreibe ein Java-Framework, für eine Klassendatei, sample.class, es erzeugt eine Proxy-Datei sample_proxy.class.

Wenn Sie das tun, müssen Sie die aufgerufene Methode inline, anstatt sie einfach aufzurufen. Das ist eine nicht-triviale Technik, die auch von ProGuard verwendet wird. Sie werden feststellen, dass es verschiedene Arten von Inlining macht. Am meisten interessiert könnten Sie in der Funktionalität von "Inlining Short Methods" sein.

Ich schlage vor, Sie kopieren es aus dem Code dort. Ich würde gut beginnen http://sourceforge.net/p/proguard/code/ci/default/tree/src/proguard/optimize/Optimizer.java#l156

Aber beachten Sie, dass dies grundlegende Kenntnisse über die JVM selbst erfordert, so wird es nicht ein einfaches Code-Snippet, das tut, was Sie wollen, in dem Kontext, den Sie erwarten.

Ich hoffe es hilft.

Verwandte Themen