У меня установлен Xdebug 2.1 и работает с PHP 5.2.13. Он может успешно подключаться к нескольким клиентам DBGP (т. xdebug.remote_log
показывает связь туда и обратно, а сами клиенты также показывают входящее соединение), но он не останавливается на контрольных точках. Я пробовал NetBeans , MacGDBp, а также debugclient из командной строки в комплекте с Xdebug.
Типичный обмен выглядит так:
Log opened at 2010-07-20 09:33:17 -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///mnt/hgfs/htdocs/mycompany/index.php" language="PHP" protocol_version="1.0" appid="14371" idekey="macgdbp"><engine version="2.1.0"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2010 by Derick Rethans]]></copyright></init> <- status -i macgdbp -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="macgdbp" status="starting" reason="ok"></response> <- step_into -i macgdbp -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="step_into" transaction_id="macgdbp" status="stopping" reason="ok"></response> <- status -i macgdbp -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="macgdbp" status="stopping" reason="ok"></response> Log closed at 2010-07-20 09:33:18
NetBeans пытается установить точки останова, и они подтверждаются Xdebug:
<- breakpoint_set -i 7 -t line -s enabled -f file:///mnt/hgfs/htdocs/mycompany/index.php -n 9 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="7" state="enabled" id="139360004"></response>
Однако Xdebug по-прежнему отказывается останавливаться!
Это происходит, если у вас есть Xdebug, загруженный как extension
(т.е. extension=xdebug.so
) в конфигурации PHP вместо zend_extension
(то есть zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so
).
Убедитесь, что у вас нет extension=xdebug.so
любом месте вашей конфигурации PHP , даже если вы уверены, что используете zend_extension
. Например, если у вас есть zend_extension
в /etc/php5/conf.d/xdebug.ini
, это может быть заменено extension
в /etc/php5/apache2/php.ini
. Если это так, ничто не будет жаловаться, и phpinfo()
будет покорно сообщать, что Xdebug загружен! (Xdebug 2.1 делает небольшое предупреждение в phpinfo()
при загрузке в качестве расширения, но предыдущие версии ничего не делают.)
Вы должны добавить полный путь к файлу xdebug.so
, даже если он помещен в папку php/modules/
, так как zend_extension
по умолчанию не выглядит в этой папке.
Если у вас есть exension=xdebug.so
, xdebug будет загружаться, но она не остановится на контрольных точках (бьет меня почему).
Удаление всего exension=xdeabug.so
(даже из файла exension=xdeabug.so
ini, который также загружается), и добавление zend_extension
решит проблему.
Если php-файлы помещаются в папку symlink, то XDebug будет работать с пути к исходной папке, а не по пути symlink-folder!
Таким образом, чтобы включить точки останова, вы должны настроить сопоставления пути в вашем ide для символических папок и файлов
Я знаю, что на это был дан ответ, но я столкнулся с одной и той же проблемой, просто хочу предложить свой ответ, если кто-то еще столкнется с этим. Я случайно пропустил значение case на моих путях, которое все еще позволяло мне подключаться и запускать отладчик, но это не останавливается на моих контрольных точках. Я не осознавал этого до тех пор, пока не разочаровался, поэтому просто хочу, чтобы люди знали, что это тоже возможно.