L 和 IL 在故障转储字符串中是什么意思?



在经历崩溃转储时,我遇到了以下行

j  java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+35

我有几个问题,我急切地想了解。

IL 和 L 在字符串中代表什么ILjava/awt/Conditional;Ljava/awt/EventFilter;

字符串末尾的 V+35 是什么?

这些是方法签名中的类型字符串。

(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V

I意味着int

Ljava/awt/Conditional;意味着java.awt.Conditional

Ljava/awt/EventFilter;意味着java.awt.EventFilter

V表示void

所以调用堆栈上的方法

void pumpEventsForFilter(int, Conditional, EventFilter)

此内部类型字符串语法记录在 javadoc forClass.getName()和 JVM 规范中。 (相同的语法出现在Object.toString生成的字符串中...假设它没有被更人性化的东西覆盖。

+35是一个字节码偏移量;即指示方法执行在这个堆栈帧中的位置。

在回答您的问题时,Oracle 关于致命错误日志的文档非常肤浅。

看起来这个答案至少对崩溃转储中的+35位有一个彻底的解释。根据该答案,这将为您提供生成的字节代码中的偏移量。

ILL仍然是个谜。

最新更新