2009-10-07 18 views
33

Estoy usando Netbeans 6.7 y XDebug para depurar un sitio PHP en mi máquina, iniciando la solicitud dentro de Netbeans (Proyecto-> Depurar). Esto funciona bien, y es muy útil.Inicie XDebug en Netbeans en una solicitud externa

Mi pregunta es: ¿es posible adjuntar el depurador a cualquier solicitud que entre, simplemente a aquellas que ejecuto desde Netbeans?

es decir, en lugar de hacer clic en "Depuración", puesto Netbeans en un modo mediante el cual se pone en marcha el depurador y se une a la siguiente petición que entra.

Tengo la sensación de que esto puede ser una pregunta estúpida, pero si es posible, eso sería genial.

Editar: Un poco más de información

Mi sistema (Ubuntu 9.04) está configurado de la siguiente manera:

Contenido de /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 

opciones de depuración Netbeans PHP se encuentran en los valores predeterminados :

Debugger Port: 9000 
Session ID: netbeans-xdebug 
Stop at the First Line: ticked 

Mi archivo /etc/hosts redirige a www.mywebsite.comlocalhost

Si hago clic en el botón de depuración en Netbeans, a continuación, Firefox se puso en marcha con la dirección de http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug y el depurador funciona como se esperaba.

Pero si acabo de navegar a http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug, esto no inicia el depurador en Netbeans.

También he intentado configurar xdebug.remote_host=www.mywebsite.com, pero eso no hace la diferencia.

Además, he habilitado xdebug.remote_log, y eso muestra información para cuando comienzo desde dentro de netbeans, pero nada para solicitudes externas. Así que no creo que XDebug vea las solicitudes externas en absoluto.

+0

nota: ¿no es remote_handler con r al final?!? –

+0

@Fronker Sí, creo que tienes razón, gracias. Fijo. –

+0

Para mí, no sabía que había TRES ubicaciones donde tenía que especificar port = 9000, y la falta de coincidencia causaba "Waiting For Connection (netbeans-xdebug)": http://stackoverflow.com/a/41768167/470749 – Ryan

Respuesta

40

ir a las propiedades del proyecto >configuración de ejecución>avanzan>depuración url y comprobar no lo hacen navegador web abierta (*). do no establecer el host en proxy de depurador. guarde estas configuraciones en la ventana del proyecto, en su proyecto: haga clic con el botón secundario del mouse>depuración (esto comienza a escuchar conexiones de depuración). no se inicia el navegador ingrese http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug en su navegador. debería romperse en netbeans.al menos eso es lo que sucede aquí :)

(*) también puede ser que tenga que establecer un mapeo ruta - para mí, funciona sin

+2

Excelente, ¡eso es lo que hace falta! –

+2

Al hacer lo anterior, desmarque la casilla "Detener en la primera línea" si no desea que se detenga en la parte superior, por ejemplo, en el archivo index.php todo el tiempo, pero solo directamente en los puntos de interrupción en un archivo específico alcanzado por un subpath; por ejemplo, 'http: // localhost/test /' -> TestController.php – tomg

+0

Si utiliza uno de los complementos del navegador enumerados en el 3er paso de [Starting the Debugger] (http://xdebug.org/ docs/remote), no necesita agregar "? XDEBUG_SESSION_START = netbeans-xdebug". Simplemente enciéndalo y desactívelo con su navegador. – colan

0

No estoy seguro acerca de Netbeans, pero cualquier otro IDE que he usado siempre está a la escucha de una conexión de depuración. Puede iniciar una nueva sesión de depuración desde xdebug agregando la cadena de consulta ?XDEBUG_SESSION_START=name a la url. Si Netbeans está escuchando, esto debería iniciar una nueva sesión de depuración.

Ver http://xdebug.org/docs/remote#browser_session para más detalles

+0

Gracias por eso, pero parece que no funciona, es como si Netbeans pudiera iniciar el depurador, pero no está escuchando conexiones externas. Amplié mi pregunta un poco. –

17

Por Xdebug por defecto no intentará conectarse al host remoto cuando el argumento 'XDEBUG_SESSION_START' Cookie/URL no se ha especificado. Puede habilitar xdebug para que esté "siempre activo", estableciendo xdebug.remote_autostart en 1 en php.ini.

Además, tendría que iniciar el depurador de PHP en NetBeans para que esto funcione. Todavía no encontré una solución mejor, pero puede hacer que el depurador PHP escuche las conexiones entrantes comenzando a depurar un archivo aleatorio (use CTRL + MAYÚS + F5 para comenzar a depurar un archivo) y luego continúe (presionando F5) una vez se detuvo en el punto de ruptura. El depurador Netbeans debería ejecutarse hasta que realmente lo detenga.

Actualización: debido a que NetBeans verifica la identificación de la sesión (XDEBUG_SESSION_START), también debe establecer la variable idekey. por ejemplo:

xdebug.remote_autostart = 1 
xdebug.idekey = "netbeans-xdebug" 
+2

¡Perfecto! Toda mi vida me he preguntado si habría alguna manera de depurar sin la necesidad de agregar '? XDEBUG_SESSION_START = session_name' a la solicitud HTTP –

+0

Nunca, nunca, conseguí que esto funcione con Netbeans. Sin embargo, puedo depurar con éxito (y solo) con una 'idekey'. – Pere

1

que tenía un problema similar (en NetBeans, Mac OS X), después de actualizar PHP y compilar/instalar Xdebug. phpinfo mostró xdebug como cargado, pero aun así no se conectó, y después de probar todo lo mencionado anteriormente todavía no tuvo éxito. Luego probé reduciendo la cantidad de parámetros establecidos en mi archivo PHP.ini al mínimo requerido. Esto pareció resolver el problema para mí.

; 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 

También cambió el nombre por defecto de xdebug.idekey netbeans-Xdebug por defecto, luego de vuelta otra vez.

Después de reiniciar Apache, xdebug comenzó a funcionar de nuevo: no estoy seguro de qué es exactamente lo que lo solucionó, pero un buen punto de partida podría ser simplemente comience con la cantidad mínima de ajustes xdebug en su archivo php.ini, luego lentamente agregue más si los necesita. Sospecho que puede haber tenido algo que ver con la configuración de rastreo, pero no puedo estar seguro.

Los ajustes básicos que terminé usando fueron:

xdebug.remote_enable=on 
xdebug.remote_port=9000 
xdebug.remote_host=localhost 
xdebug.remote_handler=dbgp 
xdebug.idekey=netbeans-xdebug 

Es también una buena idea para compilar debugclient (en el paquete fuente Xdebug), y comprobar la depuración en la línea de comandos ya que esto le dirá si Xdebug puede al menos ejecutarse independientemente de su IDE.

Cuestiones relacionadas