Ответ 1
Если вы случайно используете клиент Cisco VPN, это может быть причиной. Он поставляется с брандмауэром, который всегда включен, даже если клиент не запущен. Его можно отключить в меню "Параметры".
Как и многие другие, я потратил больше времени на отладку подключения к IDEs в XDebug, чем с помощью XDebug для отладки моих программ. Ive заставил его работать повторно, но время от времени я получаю общую проблему "Ожидание подключения" . Я не смог локализовать то, что заставляет XDebug работать или терпеть неудачу. Ive использовал ubuntu в течение двух лет; Я не ни ноб, ни гуру-страт. Что я делаю неправильно? Как лучше отладить подключение IDE к XDebug?
zend_extension = /usr/lib/php5/20090626+lfs/xdebug.so xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_log=/var/log/xdebug.log xdebug.extended_info=1 xdebug.idekey="netbeans-xdebug"
Я не могу объяснить, что вызывает проблему или когда проблема проявляется. Он начинается, когда я пытаюсь отладить мой проект, что заставляет браузер моего браузера (Chrome) открывать URL-адрес моего проекта с параметром XDEBUG_SESSION_START=netbeans-xdebug
. Это приводит к тому, что страница обычно отображается в хроме, а Netbeans сообщает только "Ожидание подключения".
Во-первых, когда сообщение "Ожидание подключиться" все еще живое, я пытаюсь использовать netstat для копирования вокруг порта 9000, который идет что-то вроде:
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
Я закрыл свою IDE и попытался использовать два файла, чтобы выяснить, что происходит: {webroot}/index.php
содержит <?php phpinfo(); ?>
, а {webroot}/dbgtest.php
содержит Проверка установки XDebug script:
<?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 подключен к script с 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
. Отладчик тогда обычно запускается нормально. Я останавливаю отладчик, вернусь к моему проекту, и именно здесь проблема действительно становится раздражающей: иногда я могу продолжить отладку своего проекта как обычно, а в других случаях проблема снова возникает, а в то время как "Ожидание Connect", показывает 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
Если вы случайно используете клиент Cisco VPN, это может быть причиной. Он поставляется с брандмауэром, который всегда включен, даже если клиент не запущен. Его можно отключить в меню "Параметры".
Пожалуйста, прочитайте эту тему.
http://forums.netbeans.org/post-99369.html
В итоге обходным путем было добавить net.ipv6.bindv6only = 0 в файл /etc/sysctl.d/bindv6only.conf, а затем перезагрузиться. После этого Xdebug работал нормально.
Ну, моя разработка - несколько отличается от твоей, но я очень хорошо знаю эту проблему. На самом деле я просто решил это... на этот раз мой Fireeall заблокировал порт XDebug, чтобы поговорить с моей IDE.
Некоторые вещи приходят мне на ум при чтении вашей учетной записи:
1) "Я не могу объяснить причину проблемы или , когда проблема проявляется." Это очень важное утверждение b/c, как мы все знаем, технические решения строго зависят от того, что основная проблема возникает всегда или иногда, по-видимому, случайным образом. Итак... можете ли вы иногда выполнять XDebugging таким образом или никогда?
2) Когда ваша среда IDE ждет, и ваш браузер сразу отобразит сайт, я думаю, что что-то не так с вашей IDE, чтобы запустить XDebug-сервер. B/c, если XDebug запустится и не сможет подключиться к вашему XDebug-клиенту, тогда веб-сайт не будет отображаться немедленно. Но в вашем случае GET-параметры просто игнорируются b/c, они не имеют никакого значения для вашего Apache/PHP-сервера, поскольку они ничего не знают о какой-то XDebug-сессии, которую вы хотели бы начать.
3) Ваши подходы к решению кажутся мне очень сложными. Сначала я хотел бы как можно проще проследить, как это работает. Например, "xdebug.idekey =" netbeans-xdebug "обычно не является обязательным для первой настройки.
Это мои два цента
Лучший Раффаэль