2009-10-07 3 views
33

Я использую Netbeans 6.7 и XDebug для отладки PHP-сайта на моей машине, запуская запрос из Netbeans (Project-> Debug). Это прекрасно работает и очень полезно.Запуск XDebug в Netbeans по внешнему запросу

Мой вопрос: возможно ли прикрепить отладчик к любому запросу, который входит, а не к тем, которые я запускаю из Netbeans?

т.е. вместо нажатия кнопки «Debug», поставить Netbeans в режим чего отладчик запускается и прикрепляет к следующему запросу, который приходит.

У меня есть чувство, что это может быть глупый вопрос, но если возможно, это было бы здорово.

Edit: Немного больше информации

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

+0

примечание: нет ли дистанционный_handler с r в конце?!? –

+0

@ Фронкер, я думаю, ты прав, спасибо. Исправлена. –

+0

Для меня я не знал, что было три места, где мне пришлось указывать порт = 9000, а несоответствие вызывало «Ожидание подключения (netbeans-xdebug)»: http://stackoverflow.com/a/41768167/470749 – Ryan

ответ

40

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

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

+2

Отлично, это делает трюк! –

+2

Если вы делаете это выше, установите флажок «Стоп в первой строке», если вы не хотите, чтобы он останавливался в верхнем, например, файле index.php все время, но только непосредственно на контрольных точках в определенном файле, например, «http: // localhost/test /» -> TestController.php – tomg

+0

Если вы используете один из плагинов браузера, перечисленных на третьем этапе [Запуск отладчика] (http://xdebug.org/ docs/remote), вам не нужно добавлять «? XDEBUG_SESSION_START = netbeans-xdebug». Просто переверните его и выключите в своем браузере. – colan

0

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

См http://xdebug.org/docs/remote#browser_session для более подробной информации

+0

Спасибо за это, но он не работает - это похоже на то, что Netbeans может запустить сам отладчик, но он не слушает внешние подключения. Несколько раз расширил мой вопрос. –

17

По умолчанию 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

Perfect !, всю мою жизнь Я задаюсь вопросом, есть ли способ отладки без необходимости добавлять '? XDEBUG_SESSION_START = session_name' в HTTP-запрос –

+0

Я никогда, никогда не получал это, чтобы работать с Netbeans. Однако я могу успешно (и только) отлаживать «idekey». – Pere

1

У меня была аналогичная проблема (на 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 может по крайней мере работать независимо от вашей среды разработки.

Смежные вопросы