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

Я пытался:

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

1 ответ

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

Другие вопросы по тегам