Xdebug успешно подключается к клиентам DBGP, но не останавливается на остановках - PullRequest
6 голосов
/ 20 июля 2010

У меня установлен 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 по-прежнему отказывается останавливаться!

Ответы [ 6 ]

10 голосов
/ 20 июля 2010

Это происходит, если Xdebug загружен как extension (то есть extension=xdebug.so) в конфигурации PHP вместо zend_extension (то есть zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so).

Убедитесь, что в вашей конфигурации PHP нет ни одной строки extension=xdebug.so , даже если вы уверены, что используете zend_extension.Например, если у вас есть zend_extension в /etc/php5/conf.d/xdebug.ini, это вполне может быть заменено на extension в /etc/php5/apache2/php.ini.Если это так, ничто не будет жаловаться, и phpinfo() покорно сообщит, что Xdebug загружен!(Xdebug 2.1 выдает небольшое предупреждение в phpinfo() при загрузке в качестве расширения, но предыдущие версии ничего не делают.)

0 голосов
/ 02 июля 2019

У меня была эта проблема в 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 compose содержала 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/

0 голосов
/ 14 декабря 2018

В моем случае 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.

Надеюсь, это поможет

0 голосов
/ 04 ноября 2014

Я знаю, что на этот вопрос ответили, но я столкнулся с той же проблемой, просто хочу предложить свой ответ, если кто-то еще столкнется с этим.Я случайно пропустил значение case в моих путях, которое все еще позволяло мне подключиться и запустить отладчик, но оно не остановилось на моих точках останова.Я не осознавал этого до особого разочарования, поэтому я просто хочу, чтобы люди знали, что это тоже возможно.

0 голосов
/ 11 июня 2014

Если файлы php помещены в папку symlink, XDebug будет работать с путем к исходной папке, а не путем к папке symlink!

Таким образом, чтобы включить точки останова, вы должны настроить сопоставление путей в вашем ide для символических папок и файлов

0 голосов
/ 02 апреля 2013

Вы должны добавить полный путь к файлу xdebug.so, даже если он находится в папке php/modules/, так как zend_extension не выглядит в этой папке по умолчанию.

Если у вас есть строка exension=xdebug.so, xdebug загрузится, но не остановится на точках останова (лучше меня).

Удаление всех exension=xdeabug.so (даже из файла cli ini, который такжезагрузки) и добавление zend_extension решит проблему.

...