我尝试在行65536(2 ^ 16)之后在带有IntelliJ的大型Java文件中安装断点,结果证明这是不可能的。断点标记有“ X”,并且工具提示说没有可执行代码。

有没有IntelliJ或Java选项可以解决此问题? idea.max.intellisense.filesize已经增加。

我在运行IntelliJ 2018.1.4的64位Java 8u144 VM上。该类文件位于Maven打包的.war文件中,并且在JBoss EAP 7中运行

最佳答案

看起来JVM不喜欢大型Java类文件。

根据JVM规范:


  4.7.12。 LineNumberTable属性
  LineNumberTable属性是Code属性(第4.7.3节)的属性表中的一个可选的可变长度属性。调试器可以使用它来确定代码数组的哪一部分与原始源文件中的给定行号相对应。
  
  如果Code属性的属性表中存在多个LineNumberTable属性,则它们可以按任何顺序出现。
  
  在代码属性的属性表中,源文件的每行可能有一个以上的LineNumberTable属性。也就是说,LineNumberTable属性可以一起表示源文件的给定行,而不必与源行一一对应。
  
  LineNumberTable属性具有以下格式:


LineNumberTable_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 line_number_table_length;
{   u2 start_pc;
    u2 line_number;
} line_number_table[line_number_table_length];
}


start_pc和line_number是“ u2”类型的事实
(无符号,2字节整数)表示行号信息
源行索引较大后未定义
大于2 ^ 16 = 65536。

09-10 13:45