ASM字节码 - 从标签偏移

时间:2017-02-10 20:19:38

标签: java java-bytecode-asm

有没有办法从标签偏移量获取行号(如在java文件中)?

  @Override
  public void visitLabel(Label label){
    super.visitLabel(label);
    mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out",
        "Ljava/io/PrintStream;");
    mv.visitLdcInsn("line " + label.getOffset() + " executed");
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
        "(Ljava/lang/String;)V", false);
  }

我已经覆盖了MethodVisitor中的visitLabel方法,以便在访问每个标签时打印lebel.getOffset。我得到一些整数值,但它们与java文件中的行号不同。

1 个答案:

答案 0 :(得分:0)

您需要创建自定义映射。参考标签访问每个行号,并按照它们出现的顺序访问每个标签。你需要:

  1. 请记住每个引用行号的标签。
  2. 检查任何标签,其中行号是被访问过的标签之前的最新行。