我正在尝试在65536行(2 ^ 16)之后在带有IntelliJ的大型Java文件中安装断点,事实证明这是不可能的。断点标有“ X”,并且工具提示说没有可执行代码。
有没有IntelliJ或Java选项可以解决此问题? idea.max.intellisense.filesize已经增加。
我在64位Java 8u144 VM上运行,在IntelliJ 2018.1.4上运行。该类文件位于Maven打包的.war文件中,并且在JBoss EAP 7中运行
答案 0 :(得分:1)
看来JVM不喜欢大型Java类文件。
根据JVM规范:
4.7.12。 LineNumberTable属性 LineNumberTable属性是Code属性(第4.7.3节)的属性表中的一个可选的可变长度属性。调试器可以使用它来确定代码数组的哪一部分与原始源文件中的给定行号相对应。
如果Code属性的属性表中存在多个LineNumberTable属性,则它们可以按任何顺序出现。
在Code属性的属性表中,源文件的每一行可能有不止一个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。