我有一个非常混乱的情况:
我有一个使用行信息编译的类(使用验证javap -l
)。此类使用 ASM 加载和检测。我确认加载了正确的类(即不是来自其他地方的陈旧类文件)。而且我还确保ClassReader.SKIP_DEBUG
没有设置 ASM 标志。现在,如果我打电话Thread.currentThread().getStackTrace()
,我会收到StackTraceElement
有关错过线路信息的此类的信息。在 Eclipse 中调试时,行信息显示在堆栈跟踪中。我还确保启动 JVM-Xint
只是为了确保在 JIT 编译代码时不会将信息作为优化删除。
最令人困惑的是:尽管所有类的加载和检测都是相同的,但这仅适用于某些类,而不是所有类。这是主要原因,为什么我认为这与 JVM 有关。
所以我的问题是:JVM 是否在堆栈跟踪中省略了行信息,如果是,我何时以及如何防止这种情况发生?
编辑:为了清楚起见:这是我面前的源文件的类文件,而不是第 3 方库的类文件。正如上面应该清楚的那样,我努力确保信息在字节码中。
编辑:现在我什至找到了一个例子,其中一个StackTraceElement
有行号信息而另一个没有,他们关心的是同一类的不同方法!