2012-07-19 20 views
19

i del gusto de conseguir la depuración remota para trabajar con la siguiente configuración del software:PHP depuración remota: XDebug no puede conectarse a JetBrains cliente PHP tormenta

Win 7 Pro 64 bits 2.2 (32 bits) incl WAMP Server. Apache 2.2.22, PHP 5.4.3, XDebug php_xdebug-2.2.1-5.4-vc9.dll JetBrains PhpStorm 4.0.3

1.) WAMP está en marcha, mi sitio se puede encontrar en localhost/Fox/

2.) Tormenta PHP tiene un proyecto en el que hay un mapeo entre mis sourcefiles y el Apache alias localhost/zorro

2.) he instalado la extensión php XDebug y añadirán las siguientes líneas a mi php. ini

[xdebug] 
zend_extension="c:/wamp/bin/php/php5.4.3/zend_ext/php_xdebug-2.2.1-5.4-vc9.dll" 
xdebug.remote_enable=On 
xdebug.remote_host="localhost" 
xdebug.remote_port=9000 
xdebug.remote_connect_back=On 
xdebug.remote_autostart=On 
xdebug.profiler_enable=On 
xdebug.profiler_enable_trigger=off 
xdebug.profiler_output_name=cachegrind.out.%t.%p 
xdebug.profiler_output_dir="c:/wamp/tmp" 
xdebug.remote_log="C:/wamp/tmp/xdebug.log" 
xdebug.remote_cookie_expire_time=6000 

Esto debería configurar el Remot e Depuración de XDebug y la dirección de devolución de llamada.

ya comprobar mi instalación aquí: xdebug.org/wizard.php

3.) He configurado PhpStorm, primero he añadido el servidor local

y después se comprueba la configuración de mi aquí

http://www.bilder-hochladen.net/files/jrn0-2-c81e-jpg-nb.html

(probé 127.0.0.1/fox como la dirección del servidor, así, y en cambio localhost)

hier mi depuración Ajustes: http://www.bilder-hochladen.net/files/jrn0-1-c4ca-jpg.html

Ahora i reiniciar mi Apache, entro en PhpStorm, establecen un punto de ruptura (que es de color rojo), haga clic en la función

Run -> Start listen to PHP Debug Connections 

El auricular del teléfono es Turing en verde, lo que cada vez que se exactamente podría significar pero es una señal positiva para mí.

Cuando ejecuto mi script php en el servidor web local, no ocurre absolutamente nada, el programa se ejecuta en el punto de interrupción y no se detiene.

En los Xdebuggers log (C: /wamp/tmp/xdebug.log) i encontrar un montón de estos mensajes como estos:

I: Checking remote connect back address. 
I: Remote address found, connecting to ::1:9000. 
E: Could not connect to client. :-(
Log closed at 2012-07-19 14:21:08 

En algún lugar de la Internet encontré la indirecta, que el cortafuegos de Windows podría bloquear la comunicación, así que lo apagué por completo, pero eso no ayudó.

También traté de conectarme a través de telnet a localhost: 9000 y recibí una respuesta de phpstorm.

¿Alguien tiene una idea de dónde buscar el error o qué más podría intentar para que todo funcione?

Muchas gracias por su ayuda de antemano, Michael

P. S. Lo siento, no puedo publicar más de dos enlaces porque soy nuevo aquí, por lo que no hay hipervínculo al asistente xdebug.

+2

Utilice TcpView, netstat, Process Explorer o una herramienta similar para verificar que PhpStorm esté escuchando en el puerto 9000. Luego intente conectarse usando 'telnet 127.0.0.1 9000'. Si telnet funciona, XDebug también debería funcionar. Si no, es un problema de red. – CrazyCoder

+0

¿Está utilizando uno de los marcadores de PHPStorm de su navegador para activar el depurador (o equivalente)? – redbirdo

+0

Hola CrazyCoder, olvidé mencionar que probé el telnet y funcionó phpstorm está escuchando. thx de todos modos. – cimmx

Respuesta

6

Puede intentar deshabilitar IPV6 http://support.microsoft.com/kb/929852, creo que este es el problema cuando intenta conectarse.

Dirección remota encontrada, que se conecta a :: 1: 9000.

El sistema intenta conectarse con IPV6 y creo que XDebug solo está habilitado para IPV4.

+0

¡Gracias! La configuración de mi servidor virtual MAMP Pro agrega automáticamente entradas de IPv6 localhost (:: 1) a/etc/hosts. Después de eliminarlos xDebug funcionó nuevamente como se esperaba! –

0

¿Dónde está exactamente su punto de interrupción en su código? Sé que XDebug puede ser divertido.

Para PHP 5.4, la configuración de Xdebug deben ser

[XDebug] 
zend_extension="<path to php_xdebug.dll>" 
xdebug.remote_enable=1 
xdebug.remote_port="<the port for XDebug to listen to>" (the default port is 9000) 
xdebug.profiler_enable=1 
xdebug.profiler_output_dir="<AMP home\tmp>" 

http://www.jetbrains.com/phpstorm/webhelp/configuring-xdebug.html

+0

¿Qué está pidiendo xdebug.profiler_output_dir? La ruta al directorio tmp en el sistema? Estoy usando Ubuntu, entonces ¿debería establecerse también/tmp ? – johnsnails

+0

@johnsnails El directorio donde se escribirá el resultado del generador de perfiles, asegúrese de que el usuario que ejecutará PHP tenga permisos de escritura para ese directorio. Su valor predeterminado es '/ tmp' – bear

12

Tal vez un poco tarde, pero ...

Aquí tienes una contradicción de los ajustes:

xdebug.remote_host="localhost" 
xdebug.remote_connect_back=On 

Esas dos configuraciones se superponen. ¿Cuál es tu caso?

a) desea depurar su aplicación sólo de un único origen (por ejemplo, está desarrollando desde y desplegar a localhost).

Luego casi ha terminado: ya ha definido que el host remoto es localhost. Comentario la línea remote_connect_back (con ;)

b) desea aceptar las fuentes de desarrollo múltiple (por ejemplo, varias máquinas de depuración de la aplicación en la misma red).

Luego, se anula la línea remote_host, por lo que puede quitarla o comentarla.

Esta es efectivamente la configuración que está ejecutando actualmente. Entonces, ¿qué pasa? Compruébelo usted mismo la ejecución de este script:

<? 
echo $_SERVER['REMOTE_ADDR']; 

La salida será ::1. Bueno, el host que realiza la solicitud a su servidor Apache es localhost. Y Apache está resolviendo ese nombre como la dirección IPv6 ::1, que al final no está mal. Pero Xdebug no puede conectarse a una dirección IPv6. Ver:

I: Remote address found, connecting to ::1:9000. 
E: Could not connect to client. :-(

Por eso nuestro objetivo será hacer que Apache para resolver localhost preferentemente a una dirección IPv4 (sin desactivar cualquier soporte para IPv6 a nivel de sistema operativo ni a nivel de Apache). Esto se puede lograr mediante la adición a su archivo hosts la siguiente línea:

127.0.0.1 localhost 

Este sencillo truco hará el truco! Ahora, localhost siempre se resolverá preferiblemente como una dirección IPv4, mientras que ::1 será perfectamente comprensible.

+1

muchas gracias. el truco con el archivo hosts fue la clave que me faltaba;) – ikkez

+3

Ahh eres mi héroe. Pasé las últimas dos horas revisando cada artículo de Internet y todos tenían el conjunto remote_connect_back. Gracias por explicar y guardar mi cordura .. +1 – PersyJack

+0

Me alegro de que haya sido útil. Es una pena que el OP no establezca la respuesta como verdadera –