2015-07-19 27 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本身的基本知识,所以在您期望的上下文中不会有一个简单的代码片段。

我希望它有帮助。