Java пошаговая компиляция / выполнение / отладка - PullRequest
0 голосов
/ 04 июля 2019

У меня есть небольшой фрагмент кода, в котором я хотел бы узнать, что думает отладчик.

/**L05*/ public class Main {
/**L06*/ public static void sp(String a){
/**L07*/    System.out.println(a);
/**L08*/ }
/**L09*/
/**L10*/ public static void main(String[] args) {
/**L11*/    sp("start");
/**L12*/
/**L13*/    //object-1
/**L14*/    Player p1 = new Player();
/**L15*/    sp("p1");
/**L16*/
/**L17*/    //object-2
/**L18*/    Player
/**L19*/            p2
/**L20*/            =
/**L21*/            new
/**L22*/                    Player
/**L23*/                    (
/**L24*/                    )
/**L25*/            ;
/**L26*/    sp
/**L27*/            (
/**L28*/                    "p2"
/**L29*/            )
/**L30*/    ;
/**L31*/
/**L32*/    //object-3
/**L33*/    Player p3= new Player(){/**strange that this works*/};
/**L34*/    Player p4=
/**L35*/    new Player();
/**L36*/    Player p5;
/**L37*/  }
/**L38*/ } 

code1

Я бы хотелзнать процесс выполнения от строки 18 до 30.

Например, когда я отлаживаю код (начиная со строки 11), он идет шаг за шагом так:

Line11 Там он выполняет метод и после этого переходит к

Line13 , потому что это комментарий.Он не выполняет его и затем переходит к

Строка 14 , где он делает объект Игрока -> резервирует пространство, необходимое игроку.Вызывает конструктор default-дает и ссылается (указатель с именем p1) на тип Player и помещает объект Player в Player.Endofline теперь переходит к

Строка 15 выполняется.Теперь он переходит к

Строка 17 это комментарий, а затем он переходит к

Строка 18 "?"Теперь я запутался.Когда я отлаживаю код -> он идет после строки 17 до строки 19, а не до строки 18 или строки 21 или того, как долго я думал, что компилятор начинается справа от точки с запятой и идет справа налево.

После Line19 он пропускает другие строки и переходит к

Строка 26 странно -> где находятсястроки 18,22-25, когда он выполняет эти строки.И как / когда отладчик распознает, когда я забыл точку с запятой в строке 25?

Я шаг за шагом отлаживал свой код с помощью точек останова.Вывод в порядке и хорошо.Код файла Player.java не важен для этого вопроса.Если что-то отсутствует или не понятно, пожалуйста, сообщите мне, и я могу добавить или изменить его.

1 Ответ

1 голос
/ 04 июля 2019

Отладчик не видит эти строки как таковые, потому что в этих строках ничего интересного не происходит.

Строка 18 - это объявление типа, p2 в строке 19 интересна, потому что там указано ссылочное значение для p2 иприсваивает значение после =.

Затем оно переходит к следующему выполнению, и это строка 26.

Вы распределяете его по нескольким строкам, но отладчик запускает скомпилированный код, который имеетнекоторые «зацепки» в них указывают на позицию в исходном исходном коде.

Обычно вы пишете это в одной строке, и именно так настраиваются отладчики.Если вы хотите увидеть больше деталей, используйте опцию step into, а не step over.

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

Задайте себе вопрос, what value would I gain if the debugger paused on line 24? Абсолютно ничего. Интересная часть происходит непосредственно перед назначением p2 и после назначения p2, или в конструкторе Player(), для которогоВы можете выбрать шаг, или когда выдается Exception.

...