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 ответ
Вам нужно будет создать собственное отображение. Каждый номер строки посещается со ссылкой на метку, и каждая метка посещается в порядке их появления. Вам необходимо:
- Запомните каждую метку, которая ссылается на номер строки.
- Проверьте, нет ли метки, чей номер строки был самым последним до посещения метки.