2015-07-19 21 views
8

Sto scrivendo un framework java, per un file di classe, sample.class, genera un file proxy sample_proxy.class. Quando viene chiamato sample.testMethod(), excutes sample_proxy.class. Ho già fare un plugin Eclipse per far funzionare il punto di interruzione, enter image description herecambia il contenuto della vista di debug in eclissi

se inizio dal Main.java, e fare un punto di interruzione in sample.testMethod(), lo stack di seguito si presenta come: Main.main -> campione .proxy_method -> sample_proxy.testMethod.
C'è un modo per ingerire il proxy per mostrare come: Main.main -> sample.testMethod?

+0

È possibile rendere campione come classe astratta, quindi non dovrebbe mostrare il proxy .. –

risposta

0

Quello che vuoi fare è possibile, ma un po 'più complicato. Prima di tutto non c'è modo di cambiare StackTrace di un programma in esecuzione. Quindi Thread.currentThread().getStackTrace() non è la strada da percorrere.

Sto scrivendo un framework Java, per un file di classe, sample.class, si genera un file proxy sample_proxy.class.

Quando lo fai, devi inline il metodo chiamato, invece di chiamarlo semplicemente. Questa è una tecnica non banale utilizzata anche da ProGuard. Troverete che fa diversi tipi di inlining. La cosa più interessante è che tu possa essere nella funzionalità di "inlining short methods".

Suggerisco di copiarlo dal codice lì. Un buon punto di partenza sarebbe http://sourceforge.net/p/proguard/code/ci/default/tree/src/proguard/optimize/Optimizer.java#l156

Ma sappi che questo richiede una conoscenza fondamentale della JVM stessa, quindi non ci sarà un semplice frammento di codice che fa quello che vuoi, nel contesto che ti aspetti.

Spero che aiuti.