在asm中访问局部变量

时间:2017-11-11 20:23:34

标签: java local-variables java-bytecode-asm

我正在尝试使用以下代码获取有关方法中局部变量的信息:

{start_v1: {end_v4, end_v5, ...}, start_v2: {end_v3}}

问题是我不断获取mn.localVariables的空列表,参数列表始终为null。我看了一个类似的问题here,因为它是我试图实现的,但它没有解决问题。关于如何解决这个问题的任何想法?

我正在测试代码的一些函数:

public void foo(ClassNode cn){
        for(MethodNode mn : cn.methods){
            System.out.println("# of local variables: " + mn.localVariables.size());
            if(mn.parameters != null)
                System.out.println("# of parameters: " + mn.parameters.size());
            else
                System.out.println("# of parameters: 0");
            System.out.println("Class name: " + cn.name);
            System.out.println("Method name: " + mn.name);
            System.out.println("Method signature: " + mn.desc);

            for(final LocalVariableNode local : (List<LocalVariableNode>)mn.localVariables) {
                System.out.println("Local Variable: " + local.name + " : " + local.desc + " : " + local.signature + " : " + local.index);
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

为什么不使用如下所示的-g选项编译Java? javac -g XXX.java

-g选项生成所有调试信息