我正在编写一个java框架,对于一个类文件sample.class,它会生成一个代理文件sample_proxy.class。当调用sample.testMethod()时,它会占用sample_proxy.class。我已经制作了一个eclipse插件来使断点工作,
如果我从Main.java开始,并在sample.testMethod()中创建一个断点,则下面的堆栈如下所示:Main.main - > sample.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本身的基本知识,因此在您期望的上下文中不会有一个简单的代码片段可以满足您的需求。
我希望它有所帮助。