这是一个非常简单的问题:
当你编译一个java程序时,它被转换为字节代码,因此,错过了.java或.class文件的每个行号(我想是的,可能我错了..)。因此,当您打印堆栈跟踪时,它如何设置获取调用堆栈中的所有类名和行号?我想我可能在这里遗漏了一些东西,但我找不到与此相关的任何内容。
答案 0 :(得分:6)
编译java程序时,它将转换为字节代码
正确。
因此,错过了.java或.class文件的每个行号(我想是的,可能我错了..)。
你错了。除非您以某种方式使用-g
编译器选项,否则行号信息将嵌入到.class文件中。
答案 1 :(得分:5)
如果存在行号,则java编译器创建的字节码将debug
标志设置为true。这可以使用java -g
来自Oracle的javac文档:
-g
- 生成所有调试信息,包括局部变量。默认情况下,仅生成行号和源文件信息。
-g:none
- 不生成任何调试信息。
-g:{keyword list}
- 仅生成某些类型的调试信息,由逗号分隔的关键字列表指定。有效关键字是:
source
- 源文件调试信息
lines
- 行号调试信息
vars
- 本地变量调试信息