Различное поведение ByteBuffer для запуска и отладки

#java #debugging #compiler-optimization #bytebuffer

#java #отладка #оптимизация компилятора #bytebuffer

Вопрос:

 byte[] arr;

ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 0x00);
buffer.put(new byte[] {0x01, 0x02});
buffer.put(new byte[] {0x03, 0x04, 0x05});
buffer.put(new byte[] {0x06, 0x07, 0x08, 0x09});
arr = buffer.array();

for(byte c : arr) {
    System.out.format("%d ", c);
}
  

Когда я запускаю приведенные выше строки кода, он выводит выходные данные так, как я хочу.

 0 1 2 3 4 5 6 7 8 9
  

Когда я запускаю его с помощью Debug, я снова получаю желаемый результат.

 0 1 2 3 4 5 6 7 8 9 
  

Теперь я ставлю точку останова в любой строке. Когда я перемещаю приложение рукой в режиме отладки, добавляется только последняя последовательность байтов. Он фактически добавляет все массивы байтов, но добавляет их все, начиная с индекса 0, и результат

 6 7 8 9 0 0 0 0 0 0
  

Я не знаю, почему так действует. Это проблема с отладчиком?

Я использую IntelljIdea и java1.8.0_162. Когда я устанавливаю параметры виртуальной машины -Djava.compiler=NONE, все работает нормально. Что изменил этот процесс?

Спасибо за вашу помощь.

Комментарии:

1. Похоже, вы щелкнули в своем отладчике таким образом, что он пропустил выполнение первых трех строк buffer.put.

2. Это невозможно. Я попытался поместить точку останова в первую строку кода. Я выполнил все команды одну за другой.