Может ли 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?

Я пытался:

но ответа не было, а мои сообщения даже не появляются на этих сайтах. Не очень открытый проект.


person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 25.06.2015    source источник


Ответы (1)


Я не думаю, что javap поддерживает этот вариант использования, но последние несколько дней я играл с кодом разбора файла класса, и на сегодняшний день он способен смешивать исходный код с кодом сборки. Подробности и исходный код см. на странице https://github.com/gagern/classfile.

person MvG    schedule 06.05.2016