Bueno, técnicamente, Xdebug es una extensión para PHP para hacer tu vida más fácil a la vez que depura tu código. En este momento, puede estar acostumbrado a depurar su código con varias otras soluciones simples. Estos incluyen el uso de eco
declaraciones en diferentes estados dentro de su programa para averiguar si su aplicación pasa una condición o para obtener el valor de una determinada variable. Además, a menudo puedes usar funciones como var_dump
, print_r
u otros para inspeccionar objetos y matrices.
A menudo me encuentro con pequeñas funciones de ayuda, como esta, por ejemplo:
función de volcado ($ valor) echo ''; var_dump ($ valor); eco '';
La verdad es que yo también solía hacer esto durante mucho tiempo..
La verdad es que también solía hacer esto durante mucho tiempo. Entonces, ¿qué tiene de malo? Técnicamente, no hay nada de malo en ello. Funciona y hace lo que debe hacer..
Pero imagínese por un momento, a medida que sus aplicaciones evolucionen, puede adquirir el hábito de rociar todo el código con pequeños ecos, var_dumps y depuradores personalizados. Ahora concedido, esto no es obstructivo durante su flujo de trabajo de prueba, pero ¿qué sucede si olvida limpiar parte de ese código de depuración antes de que llegue a producción? Esto puede causar algunos problemas bastante alarmantes, ya que esos pequeños depuradores pueden incluso encontrar su camino en el control de versiones y permanecer allí durante mucho tiempo..
La siguiente pregunta es: ¿cómo se depura en la producción? Nuevamente, imagine que está navegando en uno de sus servicios web favoritos y de repente obtiene en la pantalla un gran volcado de información de depuración. Ahora, por supuesto, puede desaparecer después de la próxima actualización del navegador, pero no es una experiencia muy buena para el usuario del sitio web.
Ahora, por último, ¿alguna vez ha deseado poder recorrer su código, línea por línea, ver expresiones e incluso ingresar a una llamada de función para ver por qué produce el valor de retorno incorrecto??
Bueno, definitivamente debes sumergirte en el mundo de la depuración profesional con Xdebug, Como puede resolver todos los problemas anteriores..
No quiero profundizar demasiado en el proceso de descarga e instalación de MAMP en una Mac. En su lugar, solo compartiré con usted que estoy usando PHP 5.4.4 y el Puerto Apache estándar (80) a lo largo de esta lectura..
Una nota rápida antes de comenzar con la construcción de nuestro propio Xdebug a través de Homebrew: Si desea tomar la ruta más fácil, MAMP ya viene con Xdebug 2.2.0. Para habilitarlo, abre:
/Aplicaciones/MAMP/bin/php/php5.4.4/conf/php.ini
con un editor de texto de su elección, vaya al final y elimine la última línea eliminando el ;
.
Las dos últimas líneas del archivo deberían leerse así:
[xdebug] zend_extension = "/ Applications / MAMP / bin / php / php5.4.4 / lib / php / extensions / no-debug-non-zts-20100525 / xdebug.so"
Ahora si te estás preguntando:
"¿Por qué querría elegir una manera más difícil que esta?"
Y mi respuesta es que nunca es un error mirar más allá de tu borde y aprender algo nuevo. Especialmente como desarrollador en estos días, echar un vistazo a las cosas relacionadas con el servidor siempre será útil en algún momento. Prometido.
Puede obtener Apple Xcode de forma gratuita fuera de la Mac App Store. Una vez que lo haya descargado, vaya a las preferencias de la aplicación, presione el "Descargas" pestaña e instala el "Herramientas de línea de comandos" de la lista.
Homebrew es un pequeño administrador de paquetes para Mac OS X que te permite tener todo lo que Apple deja de lado. Para instalar Homebrew, simplemente pegue el siguiente comando en su terminal.
ruby -e "$ (curl -fsSkL raw.github.com/mxcl/homebrew/go)"
En una Mac, Homebrew será la forma más conveniente de instalar Xdebug. Sin embargo, en Linux, compilarlo usted mismo es la mejor manera de hacerlo; lo que no es tan fácil en una Mac.
Consejo: los usuarios de Windows solo necesitan descargar el * .dll
archivo de Xdebug.org, póngalo en la carpeta XAMPP y agregue la ruta a su php.ini
expediente.
Como desarrollador de PHP, a partir de ahora debes tener en cuenta el repositorio Github "homebrew-php" de José González, que contiene muchas "cervezas" útiles para ti. Si alguna vez te has preguntado cómo instalar PHP 5.4 manualmente, estás ahí.
Ahora, si tiene algún problema al instalar Homebrew, consulte el Léame de José.
Para completar nuestra excursión Homebrew, queremos "aprovechar" las fórmulas de elaboración de cerveza de José ejecutando los siguientes comandos dentro de su aplicación de terminal:
cerveza artesanal / dupes
Esto nos dará algunas dependencias que necesitamos para las fórmulas de José..
brew tap josegonzalez / homebrew-php
¡Hecho! Ahora deberíamos estar listos para instalar Xdebug de manera cómoda, en una Mac.
De vuelta en su aplicación de terminal, ejecute:
brew install php54-xdebug
Si está en PHP 5.3, simplemente reemplace el "4" con un "3";)
La instalación llevará algún tiempo. Una vez hecho esto, verás un pequeño icono de cerveza y algunas instrucciones adicionales que puedes ignorar..
Entonces, ¿qué acaba de pasar? Homebrew descargó todos los archivos, incluidas sus dependencias, y los construyó para ti. Como ya te dije, compilarte en una Mac puede ser una molestia. Al final, conseguimos una compilación reciente. xdebug.so
situado en /usr/local/Cellar/php54-xdebug/2.2.1/
.
Atención: tenga en cuenta que Homebrew instalará PHP 5.4 en su sistema durante el proceso. Esto no debería influir en nada ya que no está habilitado en su sistema.
Para finalmente instalar Xdebug, solo tenemos que seguir unos pasos más.
Cambio de directorio (discos compactos
) a la carpeta de extensiones de MAMP:
cd /Aplicaciones/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525
Puede volver a verificar la ruta mirando la última línea de /Aplicaciones/MAMP/bin/php/php5.4.4/conf/php.ini
, ya que aquí es donde vamos.
Copia de seguridad de la existente xdebug.so
por si acaso:
mv xdebug.so xdebug.so.bak
Luego copia tu versión de Homebrew Xdebug:
cp /usr/local/Cellar/php54-xdebug/2.2.1/xdebug.so /Applications/MAMP/bin/php/php5.4/lib/php/extensions/no-debug-non-zts-20100525
Si quieres forzar una copia (cp
) comando para sobrescribir archivos existentes, simplemente haga cp -X objetivo de origen
.
Por último, pero no menos importante, necesitamos modificar el php.ini
Archivo para cargar el archivo de extensión Xdebug. Abierto /Aplicaciones/MAMP/bin/php/php5.4.4/conf/php.ini
con un editor de texto de su elección, vaya al final y elimine el comentario de la última línea eliminando el punto y coma en la parte frontal. No cierres el archivo por el momento.
Ahora relanzar MAMP, ir a http: //localhost/MAMP/phpinfo.php
. Si todo salió bien, debería encontrar esto dentro de la salida:
Si lo hiciera no trabajo, por favor asegúrese de que realmente copió sobre el xdebug.so
y tener el camino correcto en tu php.ini
expediente.
Antes de que podamos realmente comenzar la depuración, necesitamos habilitar Xdebug. Por lo tanto, espero que no hayas cerrado tu php.ini
, Como tenemos que añadir esta línea hasta el final, después de la zend_extension
opción:
xdebug.remote_enable = On
Guarda y cierra tu php.ini
Archivo y reiniciar MAMP. Ir http: //localhost/MAMP/phpinfo.php
de nuevo y busca xdebug.remote
en el sitio. Tus valores deben verse exactamente como los míos:
Si no lo hacen, siga el mismo procedimiento que utilizó para agregar remote_enable = On
para las otras declaraciones al final de su php.ini
expediente.
Ahora, abra su IDE de elección. Puede utilizar Xdebug con varias soluciones de software populares como Eclipse, Netbeans, PhpStorm y también Sublime Text. Como dije antes, usaré PhpStorm EAP 6 para esta demostración..
Dentro de PhpStorm, abra las preferencias de la aplicación y encuentre su camino para "PHP \ Debug \ DBGp Proxy" en el lado izquierdo, como en la captura de pantalla siguiente:
Ahora elige tu clave IDE personal. Esto puede ser cualquier cadena alfanumérica que desee. Prefiero llamarlo Phpstorm
, pero XDEBUG_IDE
o mi nombre
Estaría perfectamente bien también. Es importante establecer el "Puerto" valor para 9000
Como nuestra configuración estándar de Xdebug usa este puerto para conectarse al IDE.
Consejo: Si necesita ajustar esto, agregue xdebug.remote_port = número de puerto
para usted php.ini
expediente.
Atención: otros componentes pueden cambiar este valor dentro de PhpStorm, así que tenga cuidado si algo falla.
A continuación, haga clic en el pequeño botón rojo del teléfono con un pequeño error junto a él en la barra de herramientas superior. Debería volverse verde. Esto hace que PhpStorm escuche las conexiones entrantes de Xdebug.
Ahora necesitamos crear algo para depurar. Cree un nuevo archivo PHP, llámelo como desee y pegue el siguiente código:
Ahora este código es falso por defecto, pero lo arreglaremos en un momento, en la siguiente sección.
Asegúrese de que todo esté guardado y abra su navegador al script que acabamos de crear. Usaré Google Chrome para esta demostración, pero cualquier navegador funcionará..
Ahora tomemos un momento para comprender cómo se inicializa el proceso de depuración. Nuestro estado actual es: Xdebug habilitado como extensión Zend, escuchando en
puerto 9000
para que aparezca una cookie durante una solicitud. Esta cookie llevará una clave IDE que debe ser la misma que configuramos dentro de nuestro IDE. Cuando Xdebug vea la cookie que lleva la solicitud, intentará conectarse a un proxy, nuestro IDE..Entonces, ¿cómo conseguimos esa galleta en su lugar? PHP's
setcookie
? No. Aunque existen varias formas, incluso algunas para que esto funcione sin una cookie, usaremos una pequeña extensión de navegador como ayuda..Instale el "ayudante de Xdebug" en su navegador Google Chrome o busque cualquier extensión que lo haga para el navegador que está usando.
Una vez que hayas instalado la extensión, haz clic derecho en el pequeño error que aparece en tu barra de direcciones y ve a las opciones. Configure el valor de la clave IDE para que coincida con la clave que eligió en su IDE, así:
Después de configurarlo, haga clic en el error y seleccione "Depurar" de la lista. El error debería volverse verde:
Ahora, vuelva a PhpStorm o su IDE de elección y establezca un "punto de interrupción". Los puntos de interrupción son como marcadores en una línea que le dicen al depurador que detenga la ejecución del script en ese punto de interrupción.
En PhpStorm, simplemente puede agregar puntos de interrupción haciendo clic en el espacio al lado de los números de línea en el lado izquierdo:
Solo intenta hacer clic donde aparece el punto rojo en la captura de pantalla. A continuación, tendrá un conjunto de puntos de interrupción en el que su secuencia de comandos debe pausar.
Nota: puede tener varios puntos de interrupción en tantos archivos como desee.
Ahora estamos listos. Vuelva a su navegador, asegúrese de que el error esté verde y vuelva a cargar la página para enviar la cookie con la siguiente solicitud.
Consejo: si configura una cookie, estará disponible para la próxima solicitud.
Si todo va según lo planeado, esta ventana debería aparecer dentro de PhpStorm para informarle de una conexión de depuración entrante:
¿No se abrió la ventana para ti? Hagamos un poco de resolución de problemas y repitamos lo que se debe configurar para que esto tenga éxito:
- Debes encontrar información de Xdebug dentro de
phpinfo ()
de salida. Si no, consigue elxdebug.so
archivar en el lugar correcto y configurar suphp.ini
expediente.- Establezca la configuración de PhpStorm DBGp en su clave IDE, por ejemplo. "PHPSTORM" y puerto "9000".
- Haga que PhpStorm escuche las conexiones de depuración entrantes utilizando el icono rojo del teléfono que luego se volverá verde.
- Establezca un punto de interrupción en su código, o seleccione "Ejecutar \ Break en primera línea en scripts PHP" Ser independiente de cualquier punto de ruptura. Tenga en cuenta que esto no es adecuado para el uso práctico.
- Obtén una extensión de navegador para configurar la cookie de Xdebug.
- Asegúrese de que la extensión del navegador tenga la misma clave IDE que eligió dentro de su IDE.
- Vuelve a cargar la página y PhpStorm debería obtener la conexión..
Si aparece el cuadro de diálogo en la imagen anterior, acéptelo. Esto te llevará al modo de depuración, así:
Puede ver que el depurador detuvo la ejecución del script en su punto de interrupción, resaltando la línea en azul. PHP ahora está esperando y controlado por Xdebug, que está siendo manejado por tus propias manos de ahora en adelante..
Nuestro espacio de trabajo principal será la sección inferior del IDE que ya muestra información sobre el script en ejecución (los superglobales).
¿Y usted miraría eso? Ahí está la cookie que acabamos de configurar para iniciar la sesión de depuración. Ahora puede hacer clic en los superglobales e inspeccionar sus valores en este mismo momento. PHP está esperando, no hay límite de tiempo, al menos no los 30 segundos predeterminados.
En el lado izquierdo, verás unos pocos botones. Por ahora solo "Jugar" y "Detener" son de interés para nosotros. El botón de reproducción verde reanudará la secuencia de comandos. Si hay otro punto de interrupción en el código, el script continuará hasta que llegue al punto de interrupción y se detenga nuevamente..
El botón rojo de parada aborta el script. Al igual que PHP
salida
omorir
haría.
Ahora los realmente interesantes vienen en la sección superior de la ventana de depuración:
Vamos a echarles un vistazo rápidamente:
- Paso sobre: Esto significa paso una línea por delante..
- Entrar en: Si la línea azul resalta, por ejemplo, una llamada de función, este botón le permite avanzar a través de los puntos de vista de la función.
- Salir: Si ingresó a una función y desea salir antes de llegar al final, simplemente salga.
- Correr al cursor: Digamos que, por ejemplo, su archivo tiene 100 líneas de largo y su punto de interrupción se estableció en la línea dos para inspeccionar algo. Ahora desea correr rápidamente hasta el punto en el que acaba de hacer clic con el cursor hacia: este botón es para usted. Puede hacer clic "Paso sobre"
norte
tiempos también;)Ahora no te preocupes, mientras usas Xdebug te adaptarás rápidamente a los atajos en el teclado.
Realmente depurando algún código de ejemplo
Ya te dije que el código que has copiado / pegado es falso, por lo que deberás depurarlo. Comience a pasar sobre el código, declaración por declaración.
Tenga en cuenta que la línea azul solo se detiene en las líneas que realmente contienen un comando. Los espacios en blanco y los comentarios serán omitidos..
Una vez que llegue a la función llame a
Cargar datos
, Por favor no entrar en ella, sólo paso y deténgase en elSi
declaración.
Puedes ver dos nuevas variables en el "Variables" Panel en la parte inferior de la pantalla. Ahora, ¿por qué el
$ datos
variable retorno falso? Parece que el guión debería haber hecho su trabajo. Vamos a ver. Vuelva a la línea siete para ingresar a la llamada de función -> ¡bam! Recibimos un mensaje que nos informa que no podemos "dar un paso atrás". Para que su depurador vuelva a la línea siete, debe detener esta sesión y volver a cargar la página en el navegador. Hazlo y entra en la función call esta vez.Parada en el
regreso
declaración dentro de laCargar datos
Funciona y ve que paso
los
$ phpData
La matriz está vacía. losregreso
La declaración utiliza un operador ternario para detectar qué devolver. Y volveráfalso
para una matriz vacía.Arregla la línea para decir:
devuelve $ phpData;Como
json_decode
devolverá los datos onulo
en el fracaso Ahora detenga la sesión de depuración, vuelva a cargar su navegador y pase la llamada a la función esta vez.
Ahora parece que todavía tenemos un problema a medida que avanzamos en la condición. Por favor arregle la condición para usar
es nulo()
para detectar lo que está pasando:if (is_null ($ data)) die ('No se pudieron cargar datos');Ahora depende de ti intentarlo un poco. Yo sugeriría revertir el script a la versión original falsy, depurarlo con
eco
y luego compara cómo se siente eso en comparación con el uso de Xdebug.
Conclusión
A lo largo de este artículo deberías haber adquirido muchos nuevos conocimientos. No dudes en leerlo de nuevo y en ayudar a un amigo a configurar Xdebug, nada mejor que eso.!
Es posible que desee intentar reemplazar su comportamiento de depuración habitual utilizando Xdebug en su lugar. Especialmente con proyectos más grandes, orientados a objetos, ya que son mucho más fáciles de depurar e incluso ponerse al día con el flujo, si no obtienes algo de inmediato.
Tenga en cuenta que esto es sólo la punta del iceberg. Xdebug ofrece mucha más potencia que también necesita ser explorada.
Por favor, siéntase libre de hacer cualquier pregunta en los comentarios y hágame saber lo que piensa.