java中stacktrace中的行号

时间:2018-03-04 20:34:51

标签: java exception stack-trace

java如何知道抛出异常的编译代码行?类文件中的每个字节码都有关于源文件行的信息吗?

2 个答案:

答案 0 :(得分:3)

使用生成调试信息标志(-g或更具体地-g:{lines})进行编译时,编译器会将调试信息添加到类文件中。

对于行号,这是LineNumberTable属性。

答案 1 :(得分:3)

当Java程序抛出异常时,将追溯调用堆栈,直到找到匹配的catch子句。如果未找到相应的catch子句,Java Interpreter将捕获异常并打印整个堆栈跟踪。只有在编译时,回溯才会包含行号。

Sun的javac默认包含行号,而对于某些版本(如Ant的javac),您需要确保在build.xml中将调试级别设置为true

参考: Ian F Darwin的Java Cookbook ,获取可读回溯|第31页