Отладка исходного кода PHP в IDE NetBeans

Содержание

Содержимое на этой странице применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

Программное обеспечение или материал Требуемая версия
IDE NetBeans Пакет загрузки PHP
Механизм PHP Версия 5
Веб-сервер Рекомендуется использовать сервер HTTP Apache версии 2.2.
Отладчик PHP Версия XDebug 2.0 или выше

Подготовка

Для успешной отладки приложений PHP в IDE NetBeans для PHP, требуется механизм PHP, локальный веб-сервер Apache и отладчик XDebug, установленный и настроенный для разработки PHP. Если возникают проблемы с запуском XDebug, см. материалы по XDebug на вики-сайте NetBeans и/или обратитесь к сообществу по адресу

How PHP Debugging with XDebug Works in IDE NetBeans

When you run XDebug from IDE NetBeans, PHP program execution pauses at every line where you set a breakpoint. Когда исполнение программы установлено на паузу, XDebug может извлечь информацию о текущем состоянии программы, такую, как значения переменных программы. Фактически это означает следующую последовательность выполняемых действий:

  1. Установите точку останова в каждой строке, на которой исполнение исходного кода PHP должно приостановиться.
  2. Начните сеанс отладки.
  3. Когда достигнута строка с точкой останова, исполняйте сценарий по одной строке, нажимая F7 и F8. Отслеживайте состояние приложения в окнах отладчика.
  4. Закройте сеанс отладки.

For a detailed workflow of using XDebug with IDE NetBeans, see Debugging Session.

IDE NetBeans обеспечивает панель инструментов отладки, которая используется для пошагового перехода между файлами. См. Работа с панелью инструментов и редактором

Параметры отладки

Параметры IDE NetBeans включают вкладку для изменения определенных настроек по умолчанию для отладки PHP. Чтобы открыть эти параметры, зайдите в Tools ("Средства") > Options ("Параметры") (NetBeans > Preferences ("Настройки") на Mac), выберите параметры PHP, после чего выберите вкладку Debugging ("Отладка").

Примечание . Вкладка 'Отладка' была реализована в IDE NetBeans версии 7.1. В более ранних версиях NetBeans на вкладке 'Общие' PHP имеются параметры отладки. Не все параметры версии 7.1 доступны в предыдущих версиях.

Вкладка 'Отладка' в 'Параметры: PHP'

В данной панели можно изменить следующие параметры:

  • Debugger port ("Порт отладчика") Это порт, используемый XDebug и установленный в php.ini. По умолчанию используется порт 9000. Номер порта в этом диалоге должен совпадать с номером порта отладчика, установленным в php.ini. В данном диалоговом окне нельзя изменить порт, используемый XDebug. В IDE NetBeans можно передать информацию только о порте, который используется XDebug.
  • Идентификатор сеанса Произвольное название сеанса отладки. По умолчанию он называется netbeans-xdebug. Это значение важно отметить в случаях, где нам надо установить свойство xdebug.idekey в php.ini, например в некоторых случаях удаленной отладки.
  • Остановка на первой строке. Установите этот флажок для сеанса отладки, чтобы остановка произошла на первой строке кода вместо первой точки останова. В результате фокус будет удержан в среде IDE вместо переключения на окно браузера при запуске сеанса отладки.
  • Точки наблюдения и вычисления во всплывающем окне. Точки наблюдения и вычисления во всплывающем окне отключены по умолчанию. Точки наблюдения и вычисления во всплывающем окне нарушают стабильность работы XDebug.
  • Максимальная глубина структур. Задается видимость вложенных структур (таких как вложенные массивы, объекты в объектах и т.д.)
  • Максимальное число потомков. Задается видимость элементов массивов при оценке наблюдения. (Если установить максимальное число дочерних элементов на 1, то можно будет увидеть только первый элемент массива, даже если массив включает более одного элемента).
  • Показывать запрошенные URL-адреса. Открывается новое окно вывода при отладке. Это окно вывода называется PHP Requested Urls ("URL-адреса, запрошенные PHP") и отображает URL-адреса, обрабатываемые в настоящий момент. URL-адреса можно щелкать. Щелкните URL-адрес в окне вывода, чтобы открыть этот URL-адрес в окне браузера.
  • Консоль отладчика PHP. Открывается новое окно вывода, в котором показан результат сценариев отладки.

    Примечание. Задайте output_buffering = Off в используемом файле php.ini. иначе выводы сценариев будут появляться в окне вывода с задержкой.

В рамках данного учебного курса нет необходимости менять любые из этих параметров. При желании это можно сделать для включения точек наблюдения.

Работа с панелью инструментов и редактором

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

Использование панели инструментов отладчика

При запуске сеанса над редактором отладки отображается панель инструментов отладчика.

Панель инструментов отладчика в отложенном состоянии

Панель инструментов предоставляет возможности выполнения следующих действий:

Завершить сеансКнопка 'Завершить сеанс отладки' ) Завершение сеанса отладки
ПриостановитьКнопка 'Приостановить' ) Приостановка сеанса отладки
ВозобновитьКнопка 'Возобновить' ) Возобновление сеанса отладки
Обход процедурКнопка 'Обход процедур' ) Переход к следующему оператору выполнения
Вход вКнопка 'Вход в' ) Переход к вызову функции
ВыходtКнопка 'Выход' ) Выход из текущего состояния вызова функции
Переход к курсоруКнопка 'Переход к курсору' ) Запуск выполнения с позиции курсора

 

Установка точек останова

Точки останова, установленные в файлах, указывают позицию, в которой отладчик должен прервать выполнение кода.

Важно! Для использования XDebug в коде PHP необходимо установить точки останова.

Для установки точки останова щелкните в левом поле редактора строку, в которой необходимо установить эту точку.

Точка останова задана в редакторе

Чтобы удалить точку останова, щелкните маркер точки останова ( Метка точки останова ).

Также можно временно отключить точки останова. Для этого щелкните правой кнопкой мыши значок точки останова и снимите выделение с 'Точка останова' > ✔'Включено'. Выполняется переключение точки останова в отключенное состояние, после чего маркер выделяется серым ( Метка точки останова ) и отображается на левом поле.

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

Отладчик приостанавливает работу по достижении точек останова

Просмотр всплывающих подсказок

Когда работа отладчика приостановлена в время сеанса отладки, можно навести мышь на идентификатор PHP в редакторе для отображения подсказки. Если идентификатор действителен в выбранном окне стека вызовов, отображается его значение. Также можно выбрать выражения PHP. Значение выражения отображается в подсказке.

Подсказки отображаются в редакторе

Окна отладчика

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

Все окна отладки можно вызвать из среды IDE путем выбора "Window > Debugging". После активации сеанса отладки можно перейти в окна отладки.

Доступ к меню отладчика получается из главного меню среды IDE

Окно "Sessions"

В окне "Sessions" отображаются сеансы отладки, активные в настоящий момент. При запуске сеанса отладки PHP запись для отладчика PHP можно увидеть в окне Sessions ("Сеансы").

В окне 'Сеансы' отображается сеанс отладчика FireFox

IDE NetBeans также позволяет запускать одновременно несколько сеансов отладчиков. Например, можно одновременно отлаживать проект Java и проект PHP. В данном случае можно определить два сеанса, перечисленных в окне Sessions ("Сеансы").

В окне 'Сеансы' отображается несколько сеансов

Текущий сеанс (т.е. сеанс, которым можно управлять с помощью панели инструментов отладчика) отмечен более заметным значком ( Значок текущего сеанса ). Для переключения сеансов дважды щелкните сеанс, который необходимо сделать текущим или щелкните правой кнопкой мыши сеанс, который не является текущим и выберите 'Сделать текущим'.

Примечание. Рекомендуется воспользоваться переключением сеансов, если текущий сеанс отложен.

Также можно щелкнуть правой кнопкой мыши всплывающее окно для завершения сеанса (щелкните правой кнопкой мыши и выберите 'Завершить') или переключитесь между отладкой текущего потока или всех потоков в сеансе (щелкните правой кнопкой мыши и выберите 'Область' > 'Отладка всех потоков' или 'Отладка текущего потока').

Окно "Variables"

Когда работа отладчика приостановлена, в окне Variables ("Переменные") отображаются переменные текущего объекта window для выбранного кадра стека вызовов. Узел отображается для каждой переменной в текущем окне. Суперглобальные переменные группируются в отдельном узле.

В окне 'Локальная переменная' отображаются сведения об образце переменной

 

По мере продвижения по коду значение некоторых локальных переменных может меняться. Такие локальные переменные в окне "Local variables" отображаются полужирным шрифтом. Также можно щелкнуть непосредственно столбец "Value" и вручную изменить значения переменной.

Окно "Watches"

Установка точек наблюдения нарушает стабильную работу XDebug и не рекомендуется. По умолчанию точки наблюдения отключены. Однако, если точки наблюдения все же нужно установить, см. Использование дополнительных точек наблюдения.

Окно "Call Stack"

В окне "Call Stack" ("Стек вызовов") представлена последовательность вызовов, осуществленных в процессе выполнения. При приостановке отладчика в окне "Call Stack" отображается последовательность вызовов функций (т.е. стек вызовов). При первой приостановке автоматически выделяется самое верхнее окно стека вызовов. Дважды щелкните вызов функции в окне, чтобы перейти к этой строке в редакторе. Если выполнен вызов к классу PHP, окно навигатора также переместится к этой строке, если дважды щелкнуть вызов.

В окне 'Стек вызовов' отображается образец последовательности вызовов.

Можно дважды щелкнуть кадр стека вызовов, чтобы выбрать его, а затем рассмотреть значения переменных или выражений для данного кадра в окнах Variables ("Переменные") и Watches ("Точки наблюдения").

Окно "Threads"

Окно Threads ("Потоки") указывает, какой сценарий PHP активен в настоящий момент и выполняется ли он, либо находится на точке останова. Если сценарий выполняется, необходимо перейти в окно браузера для взаимодействия с ним.

Окно 'Потоки', в котором отображается страница с несколькими фреймами

Окно "Sources"

В окне "Sources" отображаются все файлы и сценарии, загруженные для сеанса отладки. В настоящий момент окно Sources ("Исходные коды") не работает для проектов PHP.

Окно "Breakpoints"

Для просмотра всех точек останова, установленных в среде IDE, можно использовать окно "Breakpoints".

В окне точек останова отображаются образцы точек останова

Из окна Breakpoints можно включать или отключать точки останова в окне Context ("Контекст"). Также можно создавать группы точек останова.

Сеанс отладки

Следующая процедура представляет собой последовательность выполняемых действий в типичном сеансе отладки.

Для запуска сеанса отладки выполните следующее:
  1. Запустите среду IDE и откройте файл, содержащий исходный код, который необходимо отладить.
  2. Установите точку останова в каждой строке, где отладчику следует приостановить работу. Для установки точки останова, поместите курсор в начало строки и нажмите Ctrl-F8 / ⌘-F8 или выберите 'Отладка' > 'Переключение точек останова на строке'
  3. В окне 'Проекты' перейдите к узлу текущего проекта, щелкните правой кнопкой мыши и выберите 'Отладка' во всплывающем меню. Среда IDE открывает окна отладки и выполняет проект в отладчике до достижения установленной точки останова.
    Примечание. Если текущий проект настроен как 'Главный' выберите 'Отладка'  > 'Отладка главного проекта' или нажмите Ctrl-F5, или щелкните Кнопка 'Отладка основного проекта'.
  4. Перейдите в окно "Local Variables". В данном окне показаны все переменные, которые инициализированы внутри текущей функции, их типы и их значения.
  5. Для просмотра значения переменной отдельно от функции переместите курсор на отображаемую переменную. Подсказка показывает значение переменной.
  6. Для построчного выполнения программы (включая строки внутри всех вызванных функций) нажмите F7 или выберите "Debug > StepInto" и наблюдайте за изменениями значений переменных в окне "Локальные переменные".
  7. Для проверки логики программы путем наблюдения за изменениями выражений определите новый параметр наблюдения:
    1. Для открытия окна "Watches " выберите путь "Window > Debugging > Watches" или нажмите сочетание клавиш Ctrl-Shift-2. Откроется окно "Watches".
    2. Щелкните окно "Watches" правой кнопкой мыши и выберите "New Watch" во всплывающем меню. Откроется окно "New Watch".
    3. Введите наблюдаемое выражение и нажмите OK.

    Теперь в течение отладки можно выполнить дополнительную проверку.

    Важно! Для установки точек наблюдения необходимо включить точки наблюдения на вкладке Debugging ("Отладка") параметров PHP.

  8. Для пропуска построчного выполнения кода в функции получите возвращенное этой функцией значение, перейдите к следующей строке после вызова функции и нажмите F8 или выберите "Debug > Step Over".
  9. Для пропуска построчного выполнения кода в функции получите возвращенное этой функцией значение, перейдите к следующей строке после вызова функции и нажмите F8 или выберите "Debug > Step Over".
  10. Для приостановки сеанса отладки выберите "Debug > Pause".
  11. Для продолжения сеанса отладки выберите "Debug > Continue".Кнопка 'Продолжить сеанс отладки'.
  12. Для отмены сеанса отладки нажмите Кнопка 'Отменить сеанс отладки'.
  13. После завершения программы окна отладки закрываются.

Пример сеанса отладки

Пример в этом разделе иллюстрирует базовые функции отладчика, включая вход в функции и перешагивание через них. Кроме того, в нём показан типичный вывод окна отладчика.
  1. Создайте новый проект PHP со следующими параметрами:
    • Тип проекта – приложение PHP
    • Расположение исходных файлов – по умолчанию папка htdocs
    • Настройка выполнения – локальный веб-сайт
    Для получения более подробной информации о настройке проекта PHP см. Настройка проекта PHP.
  2. Для активации возможности использования "горячих" клавиш во время сеанса установите курсор на узел проекта и выберите "Set as Main Project" во всплывающем меню.
  3. Введите следующий код в файле index.php:
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>NetBeans PHP debugging sample</title>
    </head>
    <body>
    <?php
    $m=5;
    $n=10;
    $sum_of_factorials = calculate_sum_of_factorials ($m, $n);
    echo "The sum of factorials of the entered integers is " . $sum_of_factorials;

    function calculate_sum_of_factorials ($argument1, $argument2) {
    $factorial1 = calculate_factorial ($argument1);
    $factorial2 = calculate_factorial ($argument2);
    $result = calculate_sum ($factorial1, $factorial2);
    return $result;
    }

    function calculate_factorial ($argument) {
    $factorial_result = 1;
    for ($i=1; $i<=$argument; $i++) {
    $factorial_result = $factorial_result*$i;
    }
    return $factorial_result;
    }

    function calculate_sum ($argument1, $argument2) {
    return $argument1 + $argument2;
    }
    ?>
    </body>
    </html>
    Этот код содержит три функции:
    • функция calculate_factorial ();
    • функция calcualte_sum ();
    • функция calculate_sum_of_factorials () (дважды вызывает функцию calculate_factorial, затем однократно вызывает функцию calcualte_sum () и возвращает рассчитанную сумму факториалов).
  4. Задайте точку останова (Ctrl-F8/⌘-F8) в начале блока PHP:
    <?php
  5. Для начала отладка щелкните Кнопка 'Отладка основного проекта'. Отладчик остановится по достижении точки останова.
  6. Нажмите F7 три раза. Отладчик остановится в той строке, в которой вызывается функция calculate_sum_of_factorials (). В окне "Local Variables" отображаются переменные $m и $n с соответствующими значениями:
    Отладчик остановится при вызове функции
  7. Нажмите F7 для перехода к функции calculate_sum_of_factorials(). Отладчик начнет выполнение кода внутри функции calculate_sum_of_factorials () и остановится при вызове функции calculate_factorial().
    Отладчик остановился при вызове встроенной функции calculate_factorial().
    Теперь в окне "Local Variables" отображаются локальные переменные $argument1 и $argument2, заявленные в функции calculate_sum_of_factorials ().
    В окне 'Локальные переменные' отображаются переменные текущей функциии до вызова встроенной функции
  8. Нажмите F7. Отладчик начнет выполнение кода с функцией calculate_factorial(). В окне "Call Stack" отображается стек вызовов функций в обратном порядке, начиная с последней вызванной функции:
    Окно &quot;Call Stack&quot; (&quot;Стек вызовов&quot;) с тремя вызовами функций, перечисленными в обратном порядке.
  9. Нажмите F7 для перехода к циклу. Просмотрите значения переменных в окне Variables ("Переменные").
    Окно 'Локальные переменные' с переменными. Выполняется проверка корректности цикла.
  10. После подтверждения правильности работы кода нажмите Ctrl-F7/⌘-F7, чтобы отменить выполнение функции. Затем будет выполнен возврат к строке, следующей после строки вызова функции calculate_factorial().
    Примечание. В качестве альтернативы можно нажимать F7 до завершения программой выполнения функции calculate_factorial(). После вызова этой функции также будет выполнен возврат к следующей строке.
    Отладчик остановился при втором вызове встроенной функции calculate_factorial().
  11. Поскольку проверка функции calculate_factorial() была только что выполнена, и известно, что функция работает нормально, ее выполнение можно "пропустить". Для этого нажмите F8. Программа завершит работу при вызове функции calculate_sum().
    Отладчик остановился при вызове встроенной функции calculate_sum().
  12. Для перехода к функции calculate_sum() нажмите F7.
  13. Для этого нажмите F8. В любом случае отладчик остановится на последней строке в функции calculate_sum_of_factorials().
    Отладчик остановился при возврате оператора $result в функции calcualate_sum_of_factorials().
  14. Нажмите F7. Отладчик переместится к строке с оператором echo.
  15. Нажимайте F7 до тех пор, пока отладчик не завершит работу с программой. Откроется окно браузера, в котором отображается результат выполнения программы:
    Выходные данные выполнения программы в окне браузера.

Использование дополнительных наблюдаемых выражений

В целях дальнейшего выполнения программы можно определить дополнительное наблюдаемое выражение. Это может способствовать обнаружению ошибок.

Внимание! Настройка дополнительных точек наблюдения нарушает стабильную работу XDebug. По умолчанию точки наблюдения отключены в параметрах отладки.

  1. Обновите код, как показано ниже (замените знак "плюс" на знак "минус"):
    function calculate_sum ($argument1, $argument2) {
    return $argument1 - argument2;
    }
    Можно предположить, что это следствие неправильного написания кода, но фактически требуется еще раз подсчитать сумму.
  2. Выберите 'Отладка' > 'Создать наблюдение' или нажмите Ctrl/⌘-shift-F7. Откроется окно "New Watch".
  3. Введите следующее выражение и нажмите "ОК".
    $factorial1+$factorial2
    Новое выражение появится в окне "Watches".
  4. Запустите сеанс отладки. После остановки отладчика остановится в указанной строке:
    return $result;
    сравните значение выражения в окне "Watches" со значением $result в окне "Local Variables". Эти значения должны совпадать, но они различны.
    Захват ошибок с помощью наблюдений
Этот пример является простым, однако позволяет получить некоторое представление об использовании наблюдаемых выражений.

Использование сочетания PHP и HTML

Можно выполнить отладку кода, содержащего одновременно блоки на языках HTML и PHP. В примере из раздела Пример сеанса отладки значения жестко запрограммированы. Расширьте код путем добавления формы ввода HTML для ввода значений.
  1. Добавьте следующий код HTML над блоком <? php? >:
     <form action="index.php" method="POST">
    Enter the first integer, please:
    <input type="text" name="first_integer"/><br/>
    Enter the second integer, please:
    <input type="text" name="second_integer"/><br/>
    <input type="submit" name="enter" value="Enter"/>
    </form>

    Дополнительная информация о формах ввода HTML.

  2. Замените следующие строки в верхней части блока <? php? >:
    $m=5;
    $n=10;
    $sum_of_factorials = calculate_sum_of_factorials ($m, $n);
    echo "The sum of factorials of the entered integers is " . $sum_of_factorials;
    на следующий код:
    if (array_key_exists ("first_integer", $_POST) && array_key_exists ("second_integer", $_POST)) {

    $result = calculate_sum_of_factorials ($_POST["first_integer"], $_POST["second_integer"]);

    echo "Sum of factorials is " . $result;

    }
  3. Установите точку останова в начале блока <? php? > и начните сеанс отладки.
  4. Нажмите F7. Отладчик перейдет к программе. Откроется окно браузера, но форма ввода в нем не отображается. Это нормальный режим работы отладчика, поскольку для отображения веб-страницы отладчик должен пройти по всему исходному коду. Фактически это означает, что отладчик обрабатывает код дважды. Первый раз обрабатывается код для отображения формы ввода HTML. Второй раз поэтапно обрабатывается код PHP.
  5. Нажимайте F7 до тех пор, пока не будет достигнут конец программы; после этого откроется форма ввода.
  6. Заполните форму и нажмите Enter. Сеанс отладки будет продолжен, как описано в разделе Пример сеанса отладки.

Отображение пути, прокси отладчика и запуск сеанса отладки по пользовательскому URL-адресу

Отлаживать можно как сценарии, так и веб-страницы, причем отладку веб-страниц можно проводить как локально, так и удаленно. При удаленной отладке к сожалению файл отладки php на удаленном сервере не совпадает с файлом, открытым в IDE NetBeans, запущенном на локальном компьютере. Таким образом, поддержка отладчика в среде IDE NetBeans должна быть способна сопоставлять пути сервера с локальными путями. Однако, в силу различных осложнений, сопоставление путей невозможно разрешить автоматически для каждого отдельного сценария. Следовательно, начиная с NetBeans 6.7, пользвоатели могут вручную определять сопоставление путей с помощью настройки проекта для отдельных конфигураций. Также можно указать прокси-сервер, если таковой имеется, и URL-адрес, с которого начинается сеанс отладки. Если этот URL-адрес не указать, отладка начнется с файла индекса.

Чтобы настроить сопоставление путей и разрешить использование пользовательских URL-адресов при отладке:

  1. Щелкните правой кнопкой узел проекта в окне Projects ("Проекты") и откройте свойства проекта в контекстном меню.
  2. В диалоговом окне 'Свойства проекта' перейдите в категорию 'Конфигурация запуска'.
  3. Нажмите кнопку Advanced ("Дополнительные"). Откроется диалоговое окно расширенной настройки сети.
  4. Добавьте путь сервера и путь проекта для сопоставления путей.
  5. В Debug URL ("Отладка URL-адреса") выберите один из следующих вариантов (не оставляйте выбор по умолчанию):

    • Ask Every Time ("Спрашивать каждый раз"), указывающий среде IDE запрашивать URL-адрес у пользователя при каждом запуске сеанса отладки.
    • Do Not Open Web Browser ("Не открывать веб-браузер"), в результате чего придется открыть браузер и ввести URL-адрес вручную (будет необходима переменная GET/POST XDEBUG_SESSION_START).
  6. В случае использования для отладки прокси-сервера введите имя узла и порт сервера в разделе Debugger Proxy ("Прокси отладчика").

Дополнительные сведения приведены в записи Path Mapping in PHP Debugger ("Сопоставление путей в отладчике PHP") блога по Net Beans для PHP.



Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с PHP IDE NetBeans присоединяйтесь к списку рассылки .

Возврат к учебной карте PHP

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo