java如何知道抛出异常的编译代码行?类文件中的每个字节码都有关于源文件行的信息吗?
答案 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页