2015-07-19 29 views
8

我正在編寫一個java框架,對於類文件sample.class,它會生成一個代理文件sample_proxy.class。當sample.testMethod()被調用時,它會執行sample_proxy.class。我已經讓一個Eclipse插件,使斷點工作, enter image description here在eclipse中更改調試視圖的內容

如果我從Main.java開始,並在sample.testMethod()斷點,在堆棧下面的樣子:Main.main - >樣本.proxy_method - > sample_proxy.testMethod。
有什麼辦法可以讓代理顯示如下:Main.main - > sample.testMethod?

+0

您可以將抽樣作爲抽象類,然後它不應該顯示代理。 –

回答

0

你想要做什麼是可能的,但有點複雜。首先,沒有辦法改變正在運行的程序的StackTrace。所以Thread.currentThread().getStackTrace()是不是要走的路。

我正在寫一個java框架,爲一個類文件sample.class,它生成一個代理文件sample_proxy.class。

當你這樣做時,你必須內聯被調用的方法,而不是簡單地調用它。這也是ProGuard所使用的非平凡技術。你會發現它有不同的內聯。最讓你感興趣的是你可以使用「內聯短方法」的功能。

我建議你從那裏的代碼複製它。我的好點是http://sourceforge.net/p/proguard/code/ci/default/tree/src/proguard/optimize/Optimizer.java#l156

但是請注意,這需要關於JVM本身的基本知識,所以在您期望的上下文中不會有一個簡單的代碼片段。

我希望它有幫助。