Запуск 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

Параметры отладки Netbeans PHP установлены по умолчанию:

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 вообще видит внешние запросы.


person John Carter    schedule 07.10.2009    source источник
comment
примечание: разве это remote_handler с r в конце?!?   -  person Frank Nocke    schedule 11.10.2011
comment
@Fronker, да, я думаю, ты прав, спасибо. Фиксированный.   -  person John Carter    schedule 11.10.2011
comment
Что касается меня, я не знал, что было ТРИ места, где мне нужно было указать порт = 9000, и несоответствие вызывало «Ожидание подключения (netbeans-xdebug)»: stackoverflow.com/a/41768167/470749   -  person Ryan    schedule 20.01.2017


Ответы (4)


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

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

person ax.    schedule 09.10.2009
comment
При выполнении вышеописанного снимите флажок «Остановить на первой строке», если вы не хотите, чтобы он останавливался в верхней части, например, в файле index.php все время, но только непосредственно в точках останова в определенном файле, достигнутом подпутем, например. , 'localhost/test' -> TestController.php - person tomg; 22.07.2013
comment
Если вы используете один из подключаемых модулей браузера, перечисленных на третьем этапе Запуск отладчика, вы не не нужно добавлять ?XDEBUG_SESSION_START=netbeans-xdebug. Просто включите и выключите его в своем браузере. - person colan; 24.05.2014
comment
Если вы даже не хотите добавлять ?XDEBUG_SESSION_START=netbeans-xdebug к запросу, перейдите к ответу @Pada - person Jaime Hablutzel; 09.11.2014
comment
@Jaime Мне кажется, проще использовать плагин для браузера, чтобы добавить аргумент XDEBUG_SESSION для каждого запроса - см. комментарий Колана выше. - person ax.; 09.11.2014
comment
@Jaime С xdebug.remote_autostart = 1 / каждый / запрос к PHP будет пытаться подключиться к Xdebug, что (по крайней мере, в моем случае) часто приводит к зависанию браузера / веб-сервера. - person ax.; 09.11.2014
comment
Это будет зависеть от варианта использования, бывают ситуации, когда у вас нет контроля над URL-адресом, используемым для запроса к серверу, например, при вызове из уже упакованного двоичного файла, которым вы не управляете, в таких ситуациях это гораздо проще пойти на xdebug_remote_autostart, в любом случае это зависит от варианта использования. - person Jaime Hablutzel; 10.11.2014

По умолчанию 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"
person Pada    schedule 17.05.2010
comment
Отлично! Всю свою жизнь мне было интересно, есть ли способ отладки без необходимости добавлять ?XDEBUG_SESSION_START=session_name к HTTP-запросу. - person Jaime Hablutzel; 09.11.2014
comment
Я никогда не заставлял это работать с Netbeans. Однако я могу успешно (и только) отлаживать с помощью idekey. - person Pere; 31.07.2015

У меня была аналогичная проблема (в 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 в значение по умолчанию, а затем обратно.

После перезапуска 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.

person Pete855217    schedule 18.07.2014

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

Дополнительные сведения см. на странице http://xdebug.org/docs/remote#browser_session.

person timmow    schedule 08.10.2009
comment
Спасибо за это, но, похоже, это не работает - как будто Netbeans может запустить сам отладчик, но не прослушивает внешние подключения. Немного расширил свой вопрос. - person John Carter; 09.10.2009