javap
命令有几个选项,其中一个是-l
,它可以打印行号和本地变量表。假设一个java程序已经成功编译,并且存在文件"Main.class",那么运行javap -l Main
可以生成如下内容:
public static void main(java.lang.String[]);
LineNumberTable:
line 100: 0
line 101: 27
line 275: 54
LocalVariableTable:
Start Length Slot Name Signature
0 55 0 args [Ljava/lang/String;
然而,我在一个java程序的类文件上使用这个javap -l xxx
命令,但是行号和局部变量表的区域是空的(这不应该是)。javap
命令和其他选项(如-s
、-verbose
)可以正常工作,但只有-l
选项对应的行信息区域为空。
有人遇到过这样奇怪的情况吗?
使用-g编译代码,否则不保留行号(类似于堆栈跟踪显示"已编译的代码"而不是行号)