corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

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

Содержание

Содержимое на этой странице относится к среде IDE NetBeans 6.5

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

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

Подготовка

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

Включение XDebug

После успешной установки программы XDebug необходимо активировать соответствующий параметр в механизме PHP.

Для включения отладчика XDebug выполните следующее:
  1. Найдите файл php.ini, используемый механизмом PHP. После запуска phpinfo() он отобразится в первой таблице под заголовком "Loaded Configuration File".
  2. Раскомментируйте загруженный файл php.ini или добавьте к нему следующие строки:
  3. zend_extension_ts="<path to the php folder>/php_xdebug-2.0.2-5.2.5.dll"
    xdebug.remote_enable=1
    xdebug.remote_host=127.0.0.1
    xdebug.remote_port=9000
    xdebug.remote_handler=dbgp
    Дополнительная информация о настройке отладчика XDebug приведена здесь.
    Примечание: Убедитесь в том, что указанные пути соответствуют местоположению требуемых файлов, определенному во время установки.

  4. При использовании пакета XAMPP требуется отключить оптимизатор Zend, поскольку он блокирует отладчик XDebug. Определите местоположение соответствующих строк и удалите их (или пометьте их как комментарии).

  5. Примечание: При использовании пакета XAMPP Lite необходимо внести указанные выше изменения в следующие два файла php.ini:
    • /xampplite/php/php.ini
    • /xampplite/apache/bin/php.in

Принципы работы отладки PHP при помощи отладчика XDebug

После активации отладчика XDebug в файле php.ini с его помощью можно приостановить либо продолжить выполнение программы PHP в любое время. Если выполнение программы приостановлено, с помощью XDebug можно извлечь информацию о текущем состоянии программы (например, значения программных переменных). Фактически это означает следующую последовательность выполняемых действий:

  • Пользователь определяет точку останова в той строке, где должно быть приостановлено выполнение исходного кода PHP.
  • По достижении этой строки пользователь выполняет сценарий построчно путем нажатия кнопок F7 и F8 и проверяет значения переменных.

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

После начала сеанса отладки под главным окном редактора появится несколько окон отладчика. Для добавления нового окна выберите путь "Window > Debugging". Доступны следующие окна:

  • "Local Variables" (отображает список инициализированных переменных, а также их типы и значения).
  • "Watches" (отображает список пользовательских выражений с соответствующими значениями).
  • "Calls Stack" (отображает список вызванных функций в обратном порядке). Функция, вызванная последней, помещается в начале списка.
  • "Breakpoints" (отображает список файлов и номера строк, в которых установлены точки останова).
  • "Sessions" (отображает список сеансов отладки, активных на текущий момент времени).
  • "Threads" (потоки выполнения).
  • "Sources" (исходные файлы).
  • "HTTP Client-Side Monitor" (монитор HTTP на стороне клиента).

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

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

Для запуска сеанса отладки выполните следующее:
  1. Запустите среду IDE, запустите проект и откройте файл, который содержит исходный код, подлежащий отладке.
  2. Поместите курсор в ту строку, до которой требуется автоматическое выполнение сценария PHP.
  3. Для установки точки останова нажмите Ctrl-F8 или выберите путь "Debug > Toggle Line Breakpoint".
  4. В окне "Projects" поместите курсор на текущий узел проекта, щелкните правой кнопкой мыши и выберите "Debug" во всплывающем меню. IDE открывает окна отладки и выполняет проект в отладчике до достижения установленной точки останова.
    Примечание: Если текущий проект определен как главный, то можно выбрать путь "Debug  > Debug Main Project", либо нажать комбинацию клавиш Ctrl-F5, либо нажать кнопку Отладить главный проект.
  5. Перейдите в окно "Local Variables". В этом окне отображаются все переменные, которые были инициализированы в рамках текущей функции, а также соответствующие типы и значения.
  6. Для просмотра значения переменной отдельно от функции переместите курсор на отображаемую переменную. Значение переменной отображается в подсказке.
  7. Для построчного выполнения программы (включая строки внутри всех вызванных функций) нажмите F7 или выберите "Debug > StepInto" и наблюдайте за изменениями значений переменных в окне "Локальные переменные".
  8. Для проверки логики программы путем наблюдения за изменениями выражений определите новый параметр наблюдения:
    1. Для открытия окна "Watches " выберите путь "Window > Debugging > Watches" или нажмите сочетание клавиш Ctrl-Shift-2. Откроется окно "Watches".
    2. Щелкните окно "Watches" правой кнопкой мыши и выберите "New Watch" во всплывающем меню. Откроется окно "New Watch".
    3. Введите наблюдаемое выражение и нажмите OK.
    4. Теперь в течение отладки можно выполнить дополнительную проверку.
  9. Для отмены построчного выполнения кода в рамках функции и перехода к следующей строке (после вызова функции) нажмите сочетание клавиш Ctrl-F7 или выберите "Debug > Step Out".
  10. Для пропуска построчного выполнения кода в функции получите возвращенное этой функцией значение, перейдите к следующей строке после вызова функции и нажмите F8 или выберите "Debug > Step Over".
  11. Для приостановки сеанса отладки выберите "Debug > Pause".
  12. Для продолжения сеанса отладки выберите "Debug > Continue" или нажмите кнопку Continue debugging session (Продолжить сеанс отладки).
  13. Для отмены сеанса отладки нажмите кнопку Cancel debugging sessio (Отменить сеанс отладки).
  14. После завершения программы окна отладки закрываются.

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

В этом разделе представлен стандартный сеанс отладки.
  1. Создайте новый проект PHP со следующими параметрами:
    • Тип проекта – приложение PHP
    • Расположение исходных файлов – по умолчанию папка htdocs
    • Настройка выполнения – локальный веб-сайт
    Для получения более подробной информации о настройке проекта PHP см. Настройка проекта PHP.
  2. После завершения создания проекта установите курсор на узел "Source Files", выберите во всплывающем меню пункт "Properties" и откройте окно "Debug". Установите флажок "Debug Server Side PHP".
  3. Для активации возможности использования "горячих" клавиш во время сеанса установите курсор на узел проекта и выберите "Set as Main Project" во всплывающем меню.
  4. Введите следующий код в файле 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 () и возвращает рассчитанную сумму факториалов).
  5. Установите точку останова (Ctrl-F8) в начале блока на языке PHP:
    <?php
  6. Для начала отладки нажмите кнопку Отладить главный проект. Отладчик остановится по достижении точки останова.
  7. Нажмите F7 три раза. Отладчик остановится в той строке, в которой вызывается функция calculate_sum_of_factorials (). В окне "Local Variables" отображаются переменные $m и $n с соответствующими значениями:
    Остановка отладчика на строке вызова функции
  8. Нажмите F7 для перехода к функции calculate_sum_of_factorials(). Отладчик начнет выполнение кода внутри функции calculate_sum_of_factorials () и остановится при вызове функции calculate_factorial().
    Остановка отладчика на строке вызова вложенной функции calculate_factorial ()
    Теперь в окне "Local Variables" отображаются локальные переменные $argument1 и $argument2, заявленные в функции calculate_sum_of_factorials ().
    Просмотр в окне "Local Variables" переменных текущей функции перед вызовом вложенной функции
  9. Нажмите F7. Отладчик начнет выполнение кода с функцией calculate_factorial(). В окне "Call Stack" отображается стек вызовов функций в обратном порядке, начиная с последней вызванной функции:
    Просмотр в окне "Call Stack" трех последних вызовов функций в обратном порядке
  10. Нажмите F7 для перехода к циклу. Просмотрите значения переменных в окне "Local Variables".
    Просмотр переменных в окне "Local Variables": проверка цикла на правильность
  11. Если код выполняется правильно, используйте сочетание клавиш Ctrl-F7 для отмены выполнения функции. Затем будет выполнен возврат к строке, следующей после строки вызова функции calculate_factorial().
    Примечание: В качестве альтернативы можно нажимать F7 до тех пор, пока программа не завершит выполнение функции calculate_factorial(). После вызова этой функции также будет выполнен возврат к следующей строке.
    Остановка отладчика на строке второго вызова вложенной функции calculate_factorial ()
  12. Поскольку проверка функции calculate_factorial() была только что выполнена, и известно, что функция работает нормально, ее выполнение можно "пропустить". Для этого нажмите F8. Программа завершит работу при вызове функции calculate_sum().
    Остановка отладчика на строке вызова вложенной функции calculate_sum ()
  13. Для перехода к функции calculate_sum() нажмите F7.
  14. Для пропуска нажмите F8. В любом случае отладчик остановится на последней строке в функции calculate_sum_of_factorials().
    Остановка отладчика на операторе return $result в функции calcualate_sum_of_factorials ()
  15. Нажмите F7. Отладчик переместится к строке с оператором echo.
  16. Нажимайте F7 до тех пор, пока отладчик не завершит работу с программой. Откроется окно обозревателя, в котором отображается результат выполнения программы:
    Просмотр результата выполнения программы в окне обозревателя

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

В целях дальнейшего выполнения программы можно определить дополнительное наблюдаемое выражение. Это может способствовать обнаружению ошибок.
  1. Обновите код, как показано ниже (замените знак "плюс" на знак "минус"):
    function calculate_sum ($argument1, $argument2) {
     			return $argument1 - argument2;
         	}
     
    Можно предположить, что это следствие неправильного написания кода, но фактически требуется еще раз подсчитать сумму.
  2. Выберите путь "Debug > New Watch" или нажмите комбинацию клавиш Ctrl-Shift-F6. Откроется окно "New Watch".
  3. Введите следующее выражение и нажмите OK.
    $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 " . $sum_of_factorials;
    }
  3. Установите точку останова в начале блока <? php? > и начните сеанс отладки.
  4. Нажмите F7. Отладчик перейдет к программе. Откроется окно обозревателя, но форма ввода в нем не отображается. Это нормальный режим работы отладчика, поскольку для отображения веб-страницы отладчик должен пройти по всему исходному коду. Фактически это означает, что отладчик обрабатывает код дважды. Первый раз обрабатывается код для отображения формы ввода HTML. Второй раз поэтапно обрабатывается код PHP.
  5. Нажимайте F7 до тех пор, пока не будет достигнут конец программы; после этого откроется форма ввода.
  6. Заполните форму и нажмите Enter. Сеанс отладки будет продолжен, как описано в разделе Пример сеанса отладки.


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

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