【发布时间】:2011-02-23 06:15:36
【问题描述】:
我有一堆.class 不是我自己构建的文件。
从这些.class 文件中,是否有可能知道用于构建它们的各种编译标志?诸如...开启或关闭优化,开启或关闭调试信息等。
【问题讨论】:
标签: java build compilation flags
我有一堆.class 不是我自己构建的文件。
从这些.class 文件中,是否有可能知道用于构建它们的各种编译标志?诸如...开启或关闭优化,开启或关闭调试信息等。
【问题讨论】:
标签: java build compilation flags
没有主要的 Java 编译器进行任何类型的优化(除了一些常量值折叠)。这通常是为 JVM 在运行时保留的。
要了解是否生成了带有或不带有调试信息的 .class,请使用 -v 标志对其运行 javap 并查找 LineNumberTable 属性。它们应该看起来像这样:
如果该类是使用完整的调试信息(包括局部变量)编译的,那么它还包含一个LocalVariableTable,如下所示:
一个实际影响输出的编译器标志是-encoding,用于指定输入源文件编码。由于 .class 文件中的字符串文字始终使用 UTF-8,因此无法从 .class 文件中检测到原始源文件编码。
【讨论】: