Читать строку кода из файла класса - PullRequest
0 голосов
/ 05 ноября 2011

Учитывая StackTraceElement.getLineNumber(), есть ли способ прочитать содержимое этой строки из скомпилированного файла класса? И даже если возможно сопоставить строку, будет ли содержимое файла класса «запутано» компилятором?

Например, если бы у меня было:

public void myMethod () {
    MyObj m = new MyObj ();   // can I reconstruct this line as String?
}

Ответы [ 3 ]

4 голосов
/ 05 ноября 2011

Код source не содержится в скомпилированном файле класса , который содержит байт-код; так что нет, работая только из файла класса, вы не можете восстановить эту строку кода. Конечно, можно декомпилировать байт-код Java, и достаточно хорошо построенный декомпилятор может реконструировать эту строку кода в большей или меньшей степени, но вам потребуется приличный декомпилятор. Конечные результаты могут или не могут сильно походить на исходный исходный код, в зависимости от оптимизаций и тому подобного.

1 голос
/ 05 ноября 2011

Вы можете получить инструкции байт-кода из файла класса (Foo.class), но не String, представляющий исходный код.Однако, учитывая исходный файл и номер строки, вы можете вместо этого прочитать строку из исходного файла (Foo.java), используя стандартные методы чтения файлов.

Чтобы получить представление о виде информации, содержащейся вфайл .class, проверьте инструмент javap.Полагаю, технически можно было бы сделать предположение об источнике, скомпилированном для этого класса, или запустить на нем декомпилятор, но номера строк не будут точно совпадать, форматирование будет совершенно другим, и, возможно, принципиально, не будет комментариеваннотации с использованием уровня хранения источника.

1 голос
/ 05 ноября 2011

вы можете включить исходный файл в ваш файл war / jar, который вы можете прочитать как файл. Байт-код содержит только номер строки, а не фактический код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...