我知道编译时此调试信息包含在.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
输出更加容易。类似但更通用的问题:How to use javap to see what lines of bytecode correspond to lines in the Java code?
我试图:
[email protected]
但没有回复,我的消息甚至都没有出现在那些网站上。不是一个非常开放的项目。
最佳答案
我不认为javap
支持此用例,但是最近几天我一直在处理一些类文件解析代码,到目前为止,它已经能够将源代码与汇编代码混合在一起。有关详细信息和源代码,请参见https://github.com/gagern/classfile。
关于java - javap可以显示与objdump -S之类的字节码混合的原始源代码行吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31056219/