Запустите XDebug в Netbeans по внешнему запросу. - PullRequest
35 голосов
/ 07 октября 2009

Я использую 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 ]

45 голосов
/ 09 октября 2009

перейти к свойствам проекта > запустить конфигурацию > advanced > отладочный URL и поставить отметку не открывать веб-браузер (*). do not установить хост под прокси отладчика . сохраните эти настройки. в окне проекта в вашем проекте: щелкните правой кнопкой мыши > debug (начинается прослушивание отладочных соединений). браузер не запущен введите http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug в вашем браузере. это должно сломаться в netbeans. по крайней мере, вот что происходит здесь:)

(*) вам также может потребоваться установить отображение пути - для меня это работает без

19 голосов
/ 17 мая 2010

По умолчанию 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"
2 голосов
/ 18 июля 2014

У меня была похожая проблема (на 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.

0 голосов
/ 09 октября 2009

Не уверен насчет Netbeans, но любая другая IDE, которую я использовал, всегда прослушивает отладочное соединение. Вы можете начать новый сеанс отладки из xdebug, добавив строку запроса ?XDEBUG_SESSION_START=name в URL. Если Netbeans прослушивает, это должно запустить новый сеанс отладки.

Подробнее см. http://xdebug.org/docs/remote#browser_session

...