В любом случае, чтобы получить флаги компиляции, используемые при создании файла .class? - PullRequest
2 голосов
/ 23 февраля 2011

У меня есть куча .class файлов, которые я сам не собрал.

Из этих .class файлов возможно ли узнать различные флаги компиляции, использованные для их создания?Такие вещи, как ... оптимизация включена или выключена, с включенной или выключенной отладочной информацией и т. Д.

1 Ответ

3 голосов
/ 23 февраля 2011

Ни один крупный Java-компилятор не выполняет каких-либо оптимизаций (за исключением некоторого свертывания константных значений).Обычно это зарезервировано для выполнения JVM во время выполнения.

Чтобы узнать, был ли создан .class с отладочной информацией или без нее, запустите на нем javap с помощью флага -v и найдитеLineNumberTable атрибут.Они должны выглядеть примерно так:

  LineNumberTable: 
   line 7: 0
   line 8: 8

Если класс был скомпилирован с полной информацией отладки (включая локальные переменные), то он также содержит LocalVariableTable, например:

  LocalVariableTable: 
   Start  Length  Slot  Name   Signature
   0      9      0    argc       [Ljava/lang/String;

Один флаг компилятора, который фактически влияет на вывод, - -encoding, чтобы указать кодировку входного исходного файла.Поскольку строковые литералы в файлах .class всегда используют UTF-8, нет способа обнаружить исходную кодировку исходных файлов из файла .class.

...