Xdebug игнорирует точки останова
В настоящее время я пытаюсь заставить Xdebug работать на нашем сервере разработки. В качестве клиента я использую NetBeans, и соединение пока работает без проблем. Но когда я пытаюсь установить точку останова в NetBeans, это просто игнорируется.
И да, я уже несколько часов гуглил, а также нашел здесь несколько вопросов, которые идеально соответствуют моему описанию: SO 1 SO 2
Но это, кажется, не решает это для меня. Xdebug
модуль загружается через zend_extension=path/to/xdebug. так в
/etc/php5/conf.d/xdebug.ini
Я также посмотрел на php5/apache и php5/cli php.ini, чтобы убедиться, что он не загружен расширением = где-то там. Я также проверил "дополнительные проанализированные файлы.ini", найденные функцией phpinfo(), и, похоже, больше нигде не загружен.
Выполнив php -m, я вижу загруженный модуль Xdebug в
[PHP Modules]
И в
[Zend Modules]
Не уверен, означает ли это, что он все еще загружен дважды или это нормально? Еще если я удалю zend_extension=/path/to/xdebug.so
от conf.d/xdebug.ini
это также больше не загружено. Поэтому я действительно предполагаю, что он загружен только там.
Если я установил параметр remote_log, это увидеть, что Netbeans
пытается установить что-то:
<- breakpoint_set -i 452 -t line -s enabled
-f file:///http:/development.xxx.de/users/itsame/index.php -n 15
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set"
transaction_id="452" state="enabled" id="258870001">
</response>
Но, похоже, это не имеет никакого эффекта (выглядит примерно так же, как и в других SO-вопросах, которые я опубликовал выше. Но если я сделаю ручное выполнение xdebug_break() внутри php-кода, оно будет корректно обработано.
Версия PHP - 5.2.6, а Xdebug - 2.1. Любые предложения, где я мог бы посмотреть дальше?
9 ответов
Похоже, что что-то не так с путем к файлу, содержащему точку останова.
<- breakpoint_set -i 452 -t line -s enabled
-f file:///http:/development.xxx.de/users/itsame/index.php -n 15 ->
У меня была похожая проблема с Eclipse. Были приняты только мои точки останова в файле индекса, а точки останова в других файлах, которые были включены в индекс, были проигнорированы.
Я посмотрел в файле remote_log и увидел следующее:
<- breakpoint_set -i 260 -t line
-f file:///~jeroen/workspace/fieg/wp-content/plugins/fieg/fieg.php -n 22->
<response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set"
transaction_id="260" id="48060002"></response>
Я заметил, что путь к точке останова был неправильным. Оказалось, что мне нужно было настроить Port Mapping в Eclipse. После установки правильного отображения точки останова начали работать. Также мой remote_log теперь показывает правильный путь:
<- breakpoint_set -i 333 -t line
-f file:///Users/jeroen/Workspace/fieg/wp-content/plugins/fieg/fieg.php -n 12->
<response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set"
transaction_id="333" id="48080005"></response>
Я не уверен, что в Netbeans есть аналог конфигурации Eclipse Port Mapping, но, надеюсь, я указал вам правильное направление.
Для меня проблема заключалась в том, что "Свойства проекта> Источник> Web Root:" не были установлены (в качестве значения использовалось значение по умолчанию).
После установки его в качестве моего веб-корня на диске, точки останова начали работать.
В вашем файле php.ini установите эту директиву:
report_zend_debug = 1
Надеюсь это кому-нибудь поможет?
В вопросе упоминалось, что файл xdebug.ini существует, но не сообщает о его содержимом. Файл моей установки по умолчанию включает только:
zend_extension=/usr/lib/php5/20100525/xdebug.so
Но для того, чтобы отладка действительно произошла, она должна быть включена. Добавьте эту строку:
xdebug.remote_enable=1
затем phpinfo()
сообщит о функционировании xdebug:
Идти к: Project > Properties > Run Configuration > Advanced (button)
Удалите все сопоставления из "Path Mapping", если вы не используете Xdebug для удаленной отладки. Это поможет решить эту проблему.
Я наткнулся на этот пост, пытаясь решить мою проблему с xdebug в Eclipse, не нарушая точки останова для веб-приложения. Я нашел комментарии здесь очень полезными. Кроме того, этот пост http://www.devside.net/wamp-server/netbeans-waiting-for-connection-netbeans-xdebug-issue оказался очень удобным для решения моей проблемы. Мне просто нужно было установить следующий флаг в моем соответствующем php.ini.
xdebug.remote_enable = 1
xdebug будет непрерывно ожидать сеанса, но после установки флага удаленной отладки проблема ожидания сеанса, проблема точки останова, а также файл журнала xdebug, который я определил, также начали регистрировать транзакции.
У меня была та же проблема: точки останова Eclipse не работали, xdebug_break() работал. Моей проблемой были пробелы в пути:
<- breakpoint_set -i 1323 -t line -f file:///Users/admin/Documents/projects/something/path%2520with%2520space/web/index.php -n 223
->
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1323" id="385680235"></response>
После изменения пути к чему-либо без пробелов точки останова в Eclipse работали нормально.
Еще одно возможное решение, единственное, которое сработало для меня, попробовав все в этом посте и во многих других...
Я отлаживаю проект PHP через XDEBUG на Eclipse Neon для Windows. Источник - удаленный Linux, смонтированный локально как диск через SFTP. Это, наверное, моя вина, что это неправильно настроено...
В Eclipse щелкните правой кнопкой мыши свой проект, затем выберите Configure
, затем Add PHP Support
, Сразу же началась индексация DLTK; до этого не началось бы ни на что.
Затем мне пришлось открыть исходный код и установить точки останова через Remote File Explorer. Я надеюсь, что это помогает кому-то.
В моем случае:
use system default php.ini configuration
не был выбран в общих настройках исполняемого файла PHP
Решено! При создании нового проекта в NetBeans я сначала устанавливаю корневую папку проекта в папку тем WordPress моего сайта WordPress. Поэтому вместо этого я создал новый проект, корнем которого является корень всего сайта WordPress, а не только его тема, и точки останова начали работать. Woohoo!