IntelliJ установка точки останова на линии> 65536 невозможна - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь установить точку останова в большом Java-файле с IntelliJ после строки 65536 (2 ^ 16), что оказывается невозможным. Точка останова помечается знаком «X», а во всплывающей подсказке говорится, что исполняемого кода нет.

Есть ли какая-либо опция IntelliJ или Java для решения проблемы? Idea.max.intellisense.filesize уже увеличен.

Я на 64-битной виртуальной машине Java 8u144, работающей на IntelliJ 2018.1.4. Файл класса находится внутри упакованного Maven-файла .war и работает внутри JBoss EAP 7

1 Ответ

0 голосов
/ 26 июня 2018

Похоже, JVM не любит большие файлы классов Java.

Из спецификации JVM:

4.7.12. Атрибут LineNumberTable Атрибут LineNumberTable является необязательным атрибутом переменной длины в таблице атрибутов атрибута Code (§4.7.3). Он может использоваться отладчиками для определения того, какая часть массива кода соответствует данному номеру строки в исходном исходном файле.

Если в таблице атрибутов атрибута Code присутствует несколько атрибутов LineNumberTable, они могут отображаться в любом порядке.

Может быть более одного атрибута LineNumberTable на строку исходного файла в таблице атрибутов атрибута Code. То есть атрибуты 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.

...