Может ли javap показать исходные строки исходного кода, смешанные с байт-кодом, например, objdump -S?
Я знаю, что эта отладочная информация содержится в файле.class при компиляции с:
javac -g Main.java
и можно наблюдать вручную из LineNumberTable:
раздел:
javap -c -constants -private -verbose '$<' > '$@'
Что я хочу сделать javap
отобразить источник в середине байт-кода.
Пример ввода:
public class New {
public static void main(String[] args) {
System.out.println(new Integer(1));
}
}
фактический javap
выход:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: new #3 // class java/lang/Integer
6: dup
7: iconst_1
8: invokespecial #4 // Method java/lang/Integer."<init>":(I)V
11: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
14: return
LineNumberTable:
line 3: 0
line 4: 14
Желаемый вывод javap:
System.out.println(new Integer(1));
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: new #3 // class java/lang/Integer
6: dup
7: iconst_1
8: invokespecial #4 // Method java/lang/Integer."<init>":(I)V
11: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
}
14: return
LineNumberTable:
line 3: 0
line 4: 14
Это сделало бы намного легче интерпретировать javap
выход.
Подобный, но более общий вопрос: как использовать javap, чтобы увидеть, какие строки байт-кода соответствуют строкам в коде Java?
Я пытался:
- создайте запрос функции по адресу: http://bugreport.java.com/submit_intro.do
- отправить письмо в список рассылки:
jdk9-dev@openjdk.java.net
но ответа не было, и мои сообщения даже не появляются на этих сайтах. Не очень открытый проект.
1 ответ
Я не думаю javap
поддерживает этот вариант использования, но в последние несколько дней я играл с некоторым кодом парсинга файлов классов, и на сегодняшний день он способен смешивать исходный код с ассемблерным кодом. Смотрите https://github.com/gagern/classfile для деталей и исходного кода.