Как настроить работу модуля XDEBUG (важные нюансы)

Главные вкладки

Аватар пользователя alex_ros alex_ros 28 марта 2010 в 0:03

Вообщем, решил поделиться своим опытом новичка, как настроить 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.

Вот собственно все нюансы, которые необходим знать чтобы у вас все заработало.

Комментарии

Аватар пользователя skiller_07 skiller_07 15 июля 2010 в 9:10

Добрый день.

Скачал модуль, установил, все ок. На странице phpinfo пишет все как вы сказали. Но если запустить php.exe то там строка

Failed loading /usr/local/php5/ext/php_xdebug-2.1.0-5.2-vc6.dll

и не создаются файлы по указанному адресу..

В чем может быть проблема?

Спасибо.

Аватар пользователя alex_ros alex_ros 8 сентября 2010 в 13:02

Может быть уже поздно отвечать, но это может быть связанно с неправильной версией библиотеки. Можно попробовать другие версии библиотеки у меня например стоит библиотека: php_xdebug-2.1.0beta3-5.2-vc6.dll версия 2.1.0.3 размер 140 КБ (143 424 байт).