我知道编译时此调试信息包含在 .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 代码中的行?
我试图:
- 在以下位置创建功能请求:http ://bugreport.java.com/submit_intro.do
- 向邮件列表发送电子邮件:
jdk9-dev@openjdk.java.net
但是没有回复,我的消息甚至没有出现在那些网站上。不是一个非常开放的项目。