2012-07-03 51 views
0

我想在我使用的测试用例中找到不同方法的偏移量。我可以找到方法开始和结束的地方,我寻找操作码RETURN和ARETURN(我在一个类中扩展了visitInsn()方法中的methodVisitor),但是我一直无法找到在那些发生在字节码。有任何想法吗?ASM用代码找到偏移量

以防万一: 我与ASM的核心API的工作,我知道树API可以帮助我找到了我所需要的,但树API使一切怠工和使用内存可以和我没有负担任何这些,所以我与核心API的工作

+0

为什么你需要知道偏移?你不直接使用这些,可能应该尝试。 –

+0

我需要他们,因为我运行其他代码使用偏移量分析代码的特定部分,但我必须搜索他们我自己运行javap和东西,所以我只是想不必再那样做... –

+0

我会建议你有像ASM或BCEL或Javaassist这样的字节码分析工具。这些旨在使编写这样的工具变得更容易,而且不需要知道偏移量。 –

回答

0

我找到了一种方法来获得每条指令的偏移量,这不是一种常见的方式,但它适用于我。 ASM不会给你每条指令的偏移量,因为通常你不需要它,但你仍然可以得到它,我不得不修改ASM中的类来使我的想法正常工作。

我修改了Label类和ClassReader类,在第二个中,有一部分只在特殊场合创建标签数组并添加标签,所以我只是告诉它为每条指令添加一个标签,然后我只需在methodVisitor中的visitInsn中调用getOffset,标签将被解析并且具有偏移量。