Вообщем, решил поделиться своим опытом новичка, как настроить XDEBUG для отладки и диагносткики PHP кода, так сказать по свежим памяти, т.к. я потратил на это дело несколько дней, собирая информацию по крупицам из блогов и порталов, сопоставляя и анализируя. Почему? Да потому что даже на официальном сайте разработчика модуля написано невнятно и непонятно для новичка.
Итак, решая одну из [#42126]задач[/#], встала необходимость пройтись по шагам в теле фунции tеmplate_preprocess_node. В качестве среды для отладки я выбрал Eclipse PDT, в качестве модуля для отладки PHP кода - XDEBUG, в качестве web-сервера, на котором работает Drupal 6.16 - Denwer. Ну и все это я делал под Windows XP SP3.
Denwer установился и заработал без проблем, Eclipse PDT тоже не создала проблем при установке и работе, с чем я намучился, так это с тем, как заставить модуль XDEBUG работать, поэтому дальше информация касается только этой стадии.
Шаг 1. В моей версии Denwer был установлен PHP версии 5.2.12, поэтому я скачал модуль php_xdebug-2.1.0beta3-5.2-vc6.dll. Как видно из названия модуля, это последняя на текущий момент версия 2.1.0 beta3, эта версия предназначена для PHP версии 5.2, и компилировалась под Microsoft Visual Studio 6.0. Более того эта версия комплилировалась для работы в режиме Thread Safety (смотри опцию Thread Safety для PHP, она должа быть enable, что можно посмотрев через phpinfo()).
Шаг 2. Теперь необходимо скопировать данный модуль в директорию расширений для PHP, в данном случае для Denwer это Z:\usr\local\php5\ext\, где диск z: - это виртуальный диск, созданый Denwer.
Шаг 3. Настойка php.ini. Для web-сервера Denwer он находится в Z:\usr\local\php5\php.ini. Открыв его, например, в блокноте, необходимо перейти в конец файла и добавить следующее:
[xdebug]
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_log = "z:\xdebug.log"
zend_extension_ts="z:\usr\local\php5\ext\php_xdebug-2.1.0beta3-5.2-vc6.dll"
Описывать отдельные строки я не буду, т.к. их назначение можно прочитать на сайте разработчика, но обращу внимание не следующие важные нюансы...
Шаг 4. Нюансы.
Нюанс 1. В разделе подключение модулей как расширений PHP прописывать что-то типа
extension=php_xdebug-2.1.0beta3-5.2-vc6.dll
категорически нельзя, если это сделать, то модуль XDEBUG работать не будет, а при запуске php.exe вы получите следующее сообщение:
PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0
Нюанс 2. В php.ini, который устанавливается с Denwer, есть такая секция:
[Zend]
zend_extension_ts = "/usr/local/php5/zend/ZendExtensionManager.dll"
zend_extension_manager.optimizer_ts="/usr/local/php5/zend/"
zend_optimizer.enable_loader = 1
zend_optimizer.optimization_level = 15
Так вот из-за несовместимости модуля php_xdebug-2.1.0beta3-5.2-vc6.dll с модулем ZendExtensionManager.dll необходимо сделать сделующее:
[Zend]
;zend_extension_ts = "/usr/local/php5/zend/ZendExtensionManager.dll"
zend_extension_manager.optimizer_ts="/usr/local/php5/zend/"
zend_optimizer.enable_loader = 1
zend_optimizer.optimization_level = 15
т.е. закомментировать все строки в секции Zend, если вы этого не сделаете, то при запуске php.exe получите следующие сообщения:
Failed loading /usr/local/php5/zend/ZendExtensionManager.dll
Ну и последнее что надо сделать, это создать страницу с именем, например, phpinfo.php и прописать в ней <?php phpinfo();?>, и запусить ее набрав в браузере http://localhost/phpinfo.php, вы должны обязательно найти в начале страницы что-то типа
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with Xdebug v2.1.0rc1-dev, Copyright (c) 2002-2010, by Derick Rethans
и ближе к концу описание модуля XDEBUG
xdebug
xdebug support enabled
Version 2.1.0rc1-dev
Т.е. как и везде пишут 2 раза упоминание об XDEBUG.
Вот собственно все нюансы, которые необходим знать чтобы у вас все заработало.
Комментарии
Добрый день.
Скачал модуль, установил, все ок. На странице phpinfo пишет все как вы сказали. Но если запустить php.exe то там строка
Failed loading /usr/local/php5/ext/php_xdebug-2.1.0-5.2-vc6.dll
и не создаются файлы по указанному адресу..
В чем может быть проблема?
Спасибо.
Может быть уже поздно отвечать, но это может быть связанно с неправильной версией библиотеки. Можно попробовать другие версии библиотеки у меня например стоит библиотека: php_xdebug-2.1.0beta3-5.2-vc6.dll версия 2.1.0.3 размер 140 КБ (143 424 байт).
спасибо, но я уже сам нашел решение
в чем была проблема?
это было давно, я уже не помню в чем конкретно была проблема, по-моему пути не верно указал.
Видео №1 Включение XDebug на Denwer - http://www.stepgt.com/content/video-%E2%84%961-vklyuchenie-xdebug-na-denwer
Видео №2 Отладка исходного кода PHP в среде IDE NetBeans - http://www.stepgt.com/content/video-%E2%84%962-otladka-iskhodnogo-koda-p...