LINUX.ORG.RU

Как настроить XDebug и phpStorm для отладки?


0

1

Здравствуйте. Решил попробовать свои силы в изучении PHP. Имеется домашний WiFi-роутер (на основе ПК c Debian Wheezy на борту) c настроенной локальной сетью и связкой Nginx + PHP-FPM + MariaDB. Этот WiFi-роутер подключён к Интернету и имеет адрес (WAN: 46.72.25.71, LAN: 192.168.0.1). К WiFi-роутеру по локалке подключён домашний ПК (LAN: 192.168.0.31) c ОС Windows 8.1, на которую установлен phpStorm. На WiFi-роутере для отладки PHP-кода установлен пакет php5-xdebug, конфиг (/etc/php5/mods-available/xdebug.ini) которого следующий:

zend_extension = /usr/lib/php5/20100525/xdebug.so

xdebug.remote_enable = on
xdebug.remote_autostart = on
;xdebug.remote_connect_back=1
xdebug.remote_host = localhost
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
;xdebug.remote_log = /var/php5-fpm/xdebug.log
xdebug.idekey = PHPSTORM

Сам phpStorm настраивал по этой статейке: http://whiskeyman.ru/articles/ubuntu/11-ustanovka-i-nastrojka-xdebug-dlya-php...

Использую на ПК с Windows браузер Opera 12.17 c расширением Xdebug 1.0. Проблема в том, что если я в php-коде ставлю брейкпоинт и задействую отладку, то phpStorm на это никак не реагирует - не появляется никаких переменных и логов.

Ребят, подскажите, в чём я неправ? Уже 3-й день маюсь... По жаре озарение что-то не приходит(((

C уважением, Геннадий.


УМВР http://rghost.ru/57176211. Конфигурация примерно такая же.

$ cat /etc/php5/fpm/conf.d/20-xdebug.ini 
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_host=localhost
xdebug.idekey=PHP_STORM
Нужно больше инфы.

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

разве localhost должен быть?

Хм... Я уже сам путаться начинаю. Вродь как phpStorm ожидает подключения по 9000-му порту от XDebug... Значит, указывать нужно не IP-адрес роутера, а IP-адрес ПК, на котором установлен phpStorm, то есть 192.168.0.31. Я прав?

Sferg
() автор топика
Ответ на: комментарий от Kilte

Да, в xdebug.remote_host нужно было прописать адрес локального компьютера с Windows и phpStorm (192.168.0.31). Проблема в том, что phpStorm не слышит Xdebug по 9000-му порту и не принимает никаких соединений. Добавил строчку:

iptables -A PREROUTING -t nat -i ${WAN} -p tcp --dport 9000 -j DNAT --to-destination 192.168.0.31

И теперь 9000-ый порт для phpStorm слышен. Даже переменные из php-кода отображаются. Однако при этом почему-то перестаёт быть доступным сам PHP (браузер открывается, phpStorm реагирует на подключение и принимает данные от Xdenug, но страница не отображается - вернее, она пытается грузиться но на этом и зависает). И всё это безобразие продолжается до тех пор, пока не щёлкнешь в phpStorm по кнопке с телефонной трубкой и жуком и не отключишь прослушку 9000-го порта. После этого PHP-интерпретатор на роутере начинает нормально работать, как прежде. Не могу понять, в чём косяк.

Sferg
() автор топика
Ответ на: комментарий от Sferg

А разве не так и должно быть? Брейкпойнт где ставится? Если до того момента, как что-то должно было отобразиться в браузере, то всё в порядке, иначе я вряд ли чем-то смогу помочь.

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

Установил Zend Debugger. В конфиге прописал:

zend_extension = /usr/lib/php5/20100525/ZendDebugger.so
zend_debugger.allow_hosts = 127.0.0.1, 192.168.0.0/24
zend_debugger.expose_remotely = always
zend_debugger.connector_port = 10137

Пытаюсь отдебажить этот код (breakpoint поставил на предпоследней строке):

<?php
    $a=5;
    $b=2;
    $c=$a+$b;
    echo "$a+$b=$c"
?>

Жму по зелёному жуку - открывается браузер, который долго и упорно пытается отобразить хоть что-нибудь, но, в итоге, ошибка 504. При этом в phpStorm успешно отображаются переменные $a, $b и $c.

Никак не могу понять: в чём проблема? Почему получаю 504-ую ошибку? Как может столь элементарный код так долго исполняться?

Прилагаю логи:

Nginx:

access.log

[04/Aug/2014:13:38:29 +0400] 192.168.0.31 example.com - "HTTP/1.1" "GET" "http"
"/index.php?start_debug=1&send_sess_end=1&debug_start_session=1&debug_session_id=16815&debug_port=10137&debug_host=192.168.0.31%2C127.0.0.1"
504 453 "-" "Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17" "-" "-"

error.log

2014/08/04 13:38:29 [error] 375#0: *186 upstream timed out (110: Connection timed out) while reading response header from upstream,
client: 192.168.0.31, server: example.com,
request: "GET /index.php?start_debug=1&send_sess_end=1&debug_start_session=1&debug_session_id=16815&debug_port=10137&debug_host=192.168.0.31%2C127.0.0.1 HTTP/1.1",
upstream: "fastcgi://unix:/var/run/php5-fpm_example.com.sock", host: "example.com"

PHP:

slow.log

[04-Aug-2014 13:37:34]  [pool example.com] pid 1551
script_filename = /home/example.com/www/index.php
[0x00007f912b4cf6f8] +++ dump failed

error.log

[04-Aug-2014 13:37:34] WARNING: [pool example.com] child 1551, script '/home/example.com/www/index.php' (request: "GET /index.php") executing too slow (5.606976 sec), logging
[04-Aug-2014 13:37:34] NOTICE: child 1551 stopped for tracing
[04-Aug-2014 13:37:34] NOTICE: about to trace 1551
[04-Aug-2014 13:37:34] ERROR: failed to ptrace(PEEKDATA) pid 1551: Input/output error (5)
[04-Aug-2014 13:37:34] NOTICE: finished trace of 1551
[04-Aug-2014 13:38:59] WARNING: [pool example.com] child 1551, script '/home/example.com/www/index.php' (request: "GET /index.php") execution timed out (90.627029 sec), terminating
[04-Aug-2014 13:38:59] WARNING: [pool example.com] child 1551 exited on signal 15 (SIGTERM) after 503.462935 seconds from start
[04-Aug-2014 13:38:59] NOTICE: [pool example.com] child 1632 started

Ожидал увидеть в процессе отладки кроме переменных в phpStorm, ещё и результат выполнения скрипта в браузере, но нарвался почему-то на такой дикий таймаут.

Sferg
() автор топика
Ответ на: комментарий от Sferg

Возможно глупый вопрос, но кнопку продолжить нажать не пробовали?

Падает с таймаутом, потому что похапешный процесс слишком долго ничего не отвечает.

А из-за того, что таймаут выполнения скриптов (set_time_limit()), стоит не в 0, то процесс прибивается:

child 1551 exited on signal 15 (SIGTERM) after 503.462935 seconds from start

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

Да нет, вопрос как раз не глупый, в отличие от моего: а кнопка «Продолжить» - это какая? Не F9 ли, случаем?

Алгоритм моих действий следующий:

1. Имеется код:

<?php
    $a=5;
    $b=2;
    $c=$a+$b;
    echo "$a+$b=$c"
?>

2. Ставлю точку останова на строку: echo «$a+$b=$c» 3. Жму по телефонной трубке для включения прослушки порта. 4. Жму по зелёному жуку для отладки. 5. Запускается браузер, в котором должен отобразиться результат исполнения кода, но идёт ожидание (через 90 секунд выбивает таймаут). В тот же момент на панели задач начинает мигать phpStorm, в котором появляются переменные (браузер всё ещё ждёт). 6. В phpStorm жму F9 и переменные в phpStorm исчезают, а в браузере тут же появляется результат исполнения кода.

Всё ли верно? Всё-таки очень смущает процесс ожидания исполнения кода после щелчка по активации отладки.

P.S. Фактически я знаком с phpStorm несколько дней. Причём знаком методом научного тыка.

Sferg
() автор топика
Ответ на: комментарий от Sferg

Ну точка остановки для того и предназначена, чтобы приостановить выполнение кода. Всё так и должно быть.

Kilte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.