前几天研究ANT编译jar包的配置时发现,在javac编译jar包是使用debuglevel的参数不同,编译出来的jar包大小存在差异,并且如果没有使用vars参数,jar包进行远程调试的时候将不会显示局部变量名的值;
事实上debuglevel的三个参数 lines vars source在eclipse中也有对应的配置
如果不勾选variable的第一行,局部变量也将无法在debug时看到实时的值。
那lines参数和source参数的作用呢?
java.lang.ArithmeticException: / by zero
at Main.test(Main.java:22)
at Common.getInfo(TestDumpStack.java:20)
at TestDumpStack.main(TestDumpStack.java:10)
以这个异常输入为例,当没有source参数时,异常打印的时候将会呈现这种形式
java.lang.ArithmeticException: / by zero
at Main.test(Unknown Source)
at Common.getInfo(Unknown Source)
at TestDumpStack.main(Unknown Source)
当有source 没有lines的时候
java.lang.ArithmeticException: / by zero
at Main.test(Main.java)
at Common.getInfo(TestDumpStack.java)
at TestDumpStack.main(TestDumpStack.java)
------
有了以上的信息,再理解LineNumberTable,LocalVariableTable,SourceFile三个属性变量
这三个属性都是很容易的了。