【发布时间】:2015-08-18 01:26:53
【问题描述】:
这是一个非常简单的问题:
当你编译一个java程序时,它被转换为字节码,因此,.java或.class文件的每一行号都被遗漏了(我想是的,可能我错了..)。那么,当您打印堆栈跟踪时,它如何设法获取调用堆栈中的所有类名和行号?我认为我可能在这里遗漏了一些东西,但我找不到与此相关的任何东西。
【问题讨论】:
-
类名(以及变量名、方法名...)不会被删除。它们在字节码中。您甚至可以在 .class 文件上使用文本编辑器看到这一点。
-
许多其他语言也是如此。人们很快发现在原始可执行代码中添加“调试符号”是一件很有用的事情。
-
即使没有文件名和行号(可以去掉),你仍然会得到类名和方法名(这些是实际运行程序所需要的,Java 是非常晚绑定的)。
标签: java compiler-construction stack-trace bytecode