Tag: 调试符号

如何从java.lang.Class对象获取源文件名/行号

在给定java.lang.Class对象的情况下,是否可以获取源文件名和声明类的行号? 数据应该在.class文件的调试信息中提供。 我知道的唯一一个JDK返回此类调试信息的地方是java.lang.StackTraceElement但我不确定是否可以强制Java为任意类创建java.lang.StackTraceElement实例,因为我们是不在类中执行方法。 我的确切用例是一个匿名内部类,它有一个编译器生成的名称。 我想知道类声明的文件名和行号。 我不想使用字节码操作框架,但如果必须的话,我可以回到它。

为什么编译一些没有调试信息的java库

我最近注意到有一些java库(JDK,joda time,iText)在没有部分/全部调试信息的情况下编译。 缺少局部变量信息,或者缺少局部变量信息和行号。 这有什么理由吗? 我意识到它会使编译代码更大,但我不认为这是一个特别重要的考虑因素。 或者它只是使用默认的编译选项构建? 谢谢。