Xdebug успешно подключается к клиентам DBGP, но не останавливается на точках останова
У меня установлен 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 по-прежнему отказывается останавливаться!
5 ответов
Это происходит, если 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()
при загрузке в качестве расширения, но предыдущие версии ничего не делают.)
У меня была эта проблема с контейнером Docker в Windows. Все выглядело правильно настроенным, phpStorm правильно прослушивал локальный порт 9000 на 127.0.0.1. phpinfo() отобразил запущенный xdebug.so. Когда я запускаю сценарий из веб-браузера, отладчик не может остановиться на точке останова. Xdebug.log содержал это:
Log opened at 2019-07-02 08:17:10
I: Connecting to configured address/port: docker.for.mac.localhost:9000.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///app/www/index.php" language="PHP" xdebug:language_version="7.2.15" protocol_version="1.0" appid="38768" idekey="PHPSTORM"><engine version="2.6.1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2018 by Derick Rethans]]></copyright></init>
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
Log closed at 2019-07-02 08:17:10
Мне пришлось подключиться к контейнеру по ssh, чтобы узнать, что он не подключается из контейнера к Windows, в которой размещен контейнер. Проблема заключалась в том, что моя конфигурация компоновки докеров содержалаdocker.for.mac.localhost
который собирался ввести в xdebug.remote_host
настройка. Даже если xdebug.log утверждал, что xdebug подключен к клиенту, на самом деле он не подключался.
Решение было xdebug.remote_host = host.docker.internal
. Это имя хоста используется в контейнере Docker для локального подключения к операционной системе, в которой размещен контейнер.
Подробнее здесь: https://docs.docker.com/docker-for-mac/networking/
Если файлы php помещены в папку symlink, XDebug будет работать с путем к исходной папке, а не путем к папке symlink!
Таким образом, чтобы включить точки останова, вы должны настроить сопоставления путей в вашем ide для символических папок и файлов
Я знаю, что на этот вопрос уже дан ответ, но я столкнулся с той же проблемой, просто хочу предложить свой ответ, если кто-то еще столкнется с этим. Я случайно пропустил значение case в моих путях, которое все еще позволяло мне подключиться и запустить отладчик, но оно не остановилось на моих точках останова. Я не осознавал этого до особого разочарования, поэтому я просто хочу, чтобы люди знали, что это тоже возможно.
В моем случае Eclipse не может получить отладочную информацию, поэтому включите журнал xdebug и проверьте ответ, возвращенный <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
без дополнительной информации.
Исправить это изменить конфигурацию отладки
xdebug.remote_host=127.0.0.1 to
xdebug.remote_host=localhost
в /usr/local/etc/php/5.6/php.ini
затем перезапустите Apache.
Надеюсь это поможет
Вы должны добавить полный путь к xdebug.so
файл, даже если он находится в php/modules/
папка, как zend_extension
не выглядит в этой папке по умолчанию.
Если у вас есть exension=xdebug.so
line, xdebug загрузится, но не остановится на точках останова (лучше меня).
Удаление всех exension=xdeabug.so
(даже из файла Cli INI, который также загружается) и добавление zend_extension
решит вопрос.