ASM Bytecode - получает номера строк из смещения метки

Есть ли способ получить номера строк (как в файле 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);
  }

Я переписал метод visitLabel в MethodVisitor для печати lebel.getOffset при посещении каждой метки. Я получаю некоторые целочисленные значения, но они не совпадают с номерами строк в файле Java.

1 ответ

Вам нужно будет создать собственное отображение. Каждый номер строки посещается со ссылкой на метку, и каждая метка посещается в порядке их появления. Вам необходимо:

  1. Запомните каждую метку, которая ссылается на номер строки.
  2. Проверьте, нет ли метки, чей номер строки был самым последним до посещения метки.
Другие вопросы по тегам