Запустите XDebug в Netbeans по внешнему запросу.
Я использую Netbeans 6.7 и XDebug для отладки сайта PHP на моей машине, запускаю запрос из Netbeans (Project->Debug). Это отлично работает и очень полезно.
Мой вопрос: возможно ли присоединить отладчик к любому входящему запросу, а не только к тем, которые я запускаю из Netbeans?
т.е. вместо нажатия "Отладка", переведите Netbeans в режим, при котором отладчик запускается и присоединяется к следующему входящему запросу.
У меня такое чувство, что это может быть глупым вопросом, но если это возможно, это было бы здорово.
Изменить: немного больше информации
Моя система (Ubuntu 9.04) настроена следующим образом:
Содержание /etc/php5/conf.d/xdebug.ini
zend_extension=/usr/lib/php5/20060613/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.idekey=netbeans-xdebug
Параметры отладки PHP Netbeans по умолчанию:
Debugger Port: 9000
Session ID: netbeans-xdebug
Stop at the First Line: ticked
мой /etc/hosts
перенаправления файлов www.mywebsite.com
в localhost
Если я нажимаю на кнопку отладки в Netbeans, то Firefox запускается с адресом http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
и отладчик работает как положено.
Но если я просто зайду http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
, это не запускает отладчик в Netbeans.
Я также пытался установить xdebug.remote_host=www.mywebsite.com
, но это не имеет значения.
Также я включил xdebug.remote_log
, и это показывает информацию для того, когда я начинаю из NetBeans, но ничего для внешних запросов. Поэтому я не думаю, что XDebug вообще видит внешние запросы.
4 ответа
Перейдите в свойства проекта > запустить конфигурацию > расширенный > отладочный URL и проверьте , не открывать веб-браузер (*). не устанавливайте хост под прокси отладчика. сохраните эти настройки. в окне проекта, в вашем проекте: щелкните правой кнопкой мыши > отладка (начинается прослушивание отладочных соединений). браузер не запущен войти http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug
в вашем браузере. это должно сломаться в netbeans. по крайней мере вот что здесь происходит:)
(*) вам также может понадобиться установить отображение пути - для меня это работает без
По умолчанию xdebug не будет пытаться подключиться к удаленному хосту, если не указан аргумент cookie / URL "XDEBUG_SESSION_START". Вы можете разрешить xdebug быть всегда включенным, установив для xdebug.remote_autostart значение 1 в php.ini.
Кроме того, вам нужно запустить PHP-отладчик в NetBeans, чтобы это работало. Я пока не нашел лучшего решения, но вы можете настроить отладчик PHP на прослушивание входящих соединений, начав отлаживать случайный файл (используйте CTRL+SHIFT+F5, чтобы начать отладку файла), а затем продолжите (нажав F5) один раз. это остановилось в точке останова. Отладчик Netbeans должен работать до тех пор, пока вы его не остановите.
Обновление: из-за того, что NetBeans проверяет идентификатор сеанса (XDEBUG_SESSION_START), вы также должны установить переменную idekey. например:
xdebug.remote_autostart = 1
xdebug.idekey = "netbeans-xdebug"
У меня была похожая проблема (на NetBeans, Mac OSX) после обновления PHP и компиляции / установки xdebug. phpinfo показывал xdebug как загруженный, но он все равно не подключался, и после попытки всего перечисленного выше все равно не получилось. Затем я попытался уменьшить количество параметров, установленных в моем файле PHP.ini, до необходимого минимума. Это, казалось, решило проблему для меня.
; REMOVED (commented) the following
; xdebug.remote_log=/myfile.log
;xdebug.extended_info = off
;xdebug.auto_trace=1
;xdebug.trace_output_dir=/mydir/myphptracefile.txt
;xdebug.trace_output_name=php_trace.%c
;xdebug.collect_params=4
Я также переименовал стандартный xdebug.idekey из netbeans-xdebug в default, а затем снова в исходное состояние.
После перезапуска Apache xdebug снова начал работать: я не уверен, что именно это исправило, но хорошей отправной точкой может быть просто начать с минимального количества настроек xdebug в вашем файле php.ini, а затем медленно добавить больше, если вам нужно их. Я подозреваю, что это как-то связано с настройками трассировки, но не уверен.
Основные настройки, которые я использовал в итоге:
xdebug.remote_enable=on
xdebug.remote_port=9000
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.idekey=netbeans-xdebug
Также неплохо скомпилировать debugclient (в пакете исходного кода xdebug) и проверить отладку в командной строке, так как это скажет вам, может ли xdebug работать хотя бы независимо от вашей IDE.
Не уверен насчет Netbeans, но любая другая IDE, которую я использовал, всегда прослушивает отладочное соединение. Вы можете начать новый сеанс отладки из xdebug, добавив строку запроса ?XDEBUG_SESSION_START=name
на URL. Если Netbeans прослушивает, это должно запустить новый сеанс отладки.
См. http://xdebug.org/docs/remote для получения дополнительной информации.