Преамбула
Как и многие, я потратил больше часов на отладку соединения моей IDE с XDebug, чем с использованием XDebug для отладки своих программ. Я заставляю его работать многократно , но время от времени у меня возникает общая проблема "Ожидание соединения" . Я не смог локализовать то, что заставляет XDebug работать или не работать. Я использую Ubuntu в течение двух лет; Я не нуб и не сторонний гуру. Что я делаю не так? Как мне лучше отладить соединение моей IDE с XDebug?
Настройка
Процедура
Проблема
Я не могу объяснить, что вызывает проблему или когда проблема проявляется. Он начинается, когда я пытаюсь отладить свой проект, в результате чего мой браузер разработчика (Chrome) открывается по URL-адресу моего проекта с параметром XDEBUG_SESSION_START=netbeans-xdebug
. Это заставляет страницу нормально отображаться в Chrome, в то время как Netbeans сообщает только «Ожидание подключения».
Отладка XDebug
Во-первых, с сообщением «Ожидание соединения» все еще жив, я попытаюсь использовать netstat для поиска порта 9000, который выглядит как что-то вроде this:
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
Я закрыл свою IDE и попытался использовать два файла, чтобы выяснить, что происходит: {webroot}/index.php
содержит <?php phpinfo(); ?>
, а {webroot}/dbgtest.php
содержит скрипт проверки установки XDebug :
<?php
$address = '127.0.0.1';
$port = 9000;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die('Unable to bind');
socket_listen($sock);
$client = socket_accept($sock);
echo "connection established: $client";
socket_close($client);
socket_close($sock);
?>
Когда я запускаю XDebug debugclient
и открываю http://127.0.0.1/dbgtest.php?XDEBUG_SESSION_START=mysession
, я обычно получаю обычный вывод и затем проверяю, подключен ли XDebug к сценарию с помощью netstat в другом терминале:
$ netstat -an | grep 9000
tcp 0 0 127.0.0.1:9000 127.0.0.1:34831 ESTABLISHED
tcp 0 0 127.0.0.1:34831 127.0.0.1:9000 ESTABLISHED
Хотя оба они, похоже, указывают на то, что соединение установлено, на веб-странице написано «Невозможно связать», что я не могу объяснить. Я Ctrl-c, чтобы выйти из debugclient, и netstat в этот момент проверяет, что порт 9000 не имеет активности. Я запускаю Netbeans, открываю {webroot}/index.php
и включаю отладчик, который открывает http://127.0.0.1/index.php
. Отладчик тогда обычно запускается нормально. Я останавливаю отладчик, возвращаюсь к своему проекту, и именно здесь проблема действительно становится раздражающей: иногда я могу продолжать отладку своего проекта в обычном режиме, а в других случаях проблема возникает снова, и пока «Ожидание Отображается значок подключения, netstat показывает:
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
tcp6 0 0 127.0.0.1:9000 127.0.0.1:34681 TIME_WAIT
В других случаях я перезагружаю свой компьютер, запускаю терминал и нахожу:
$ netstat -an | grep 9000
unix 3 [ ] STREAM CONNECTED 9000
$ telnet 127.0.0.1 9000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Я недостаточно знаком с сетью и внутренними компонентами Linux, чтобы понять, на что это указывает. Ясно, что что-то использует порт 9000. Что это значит? Обратите внимание, что, несмотря на мои настройки в php.ini:
$ cat /var/log/xdebug.log
cat: /var/log/xdebug.log: No such file or directory
Как правильно отладить соединение между IDE и XDebug?