java - ASM 字节码 - 从标签偏移量获取行号

标签 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. 记住每个引用行号的标签。
  2. 检查是否有任何标签的行号是所访问的标签之前的最新行号。

关于java - ASM 字节码 - 从标签偏移量获取行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42168006/

相关文章:

java - 如何在 Scala 中制作功能齐全的不可变类?

listCellRenderer 内的 java jcombobox

java - 查找 Java 方法的字节码大小

java - 如何从类中获取字节码作为字节数组

java - Spring Cloud Stream - 应用程序初始化后发送消息

java - NoClassDefFound错误: org/aspectj/lang/Sign

java - 为什么 :text doesn't want to display in the main. html 模板显示在其他页面中?

java - 在 Java 字节码中向函数添加参数

javac 无法找到导入

java - Java中如何找到方法调用的行号