Depurar en PHP con Xdebug y PHPStorm

Depurar un programa es el proceso de identificar y corregir errores de programación. En inglés se le conoce como debugging, es que se asemeja a la eliminación de bichos (bugs), manera en que se conoce informalmente a los errores de programación. Se dice que el término bug proviene de la época de los ordenadores de válvula termoiónica, en los cuales los problemas se generaban por los insectos que eran atraídos por las luces y estropeaba el equipo.

En este artículo veremos como encontrar “insectos” en nuestro código PHP y con la llegada de Drupal 8 yo recomendaría encarecidamente su uso, por la cantidad de datos que llevan los objetos en sí, y que haciendo un var_dump() sería casi imposible de entender en el navegador.

1. Instalar Xdebug:

Primero deberemos crear un archivo, le pondré phpinfo.php con el siguiente código:

Lo ubicamos en la raíz de nuestro servidor y accedemos a él en nuestro navegador, en mi caso sería: http://localhost/phpinfo.php

Veríamos algo como esto:

phpinfo

Marcamos todo el contenido y lo copiamos:

phpinfo_copy

Nos dirigimos a http://xdebug.org/wizard.php donde lo pegamos y damos en el botón “Analyse my phpinfo() output”:

xdebug

A continuación el sitio le mostrará los pasos para instalar el Xdebug en su Sistema Operativo.

xdebug_instructions

En el paso donde se activa la extensión en su archivo php.ini, adiciona también las siguientes líneas:

xdebug.remote_enable=1

xdebug.remote_host=127.0.0.1

xdebug.remote_port=9000

xdebug.idekey=PHPSTORM

xdebug.max_nesting_level=500

Como lo muestra la siguiente imagen:

xdebug_config

 

2. Adicionar los bookmarklet de PHPStorm a nuestro navegador:

Debemos ir a http://www.jetbrains.com/phpstorm/marklets/ y hacer clic en el botón “Generate”

 

xdebug_bookmarket

 

A continuación tendremos los enlaces disponibles:

bookmarket_generated

 

Deberíamos agregarlos a nuestro favoritos, pues los usaremos cada vez que vayamos a depurar, solo basta con arrastrarlo a nuestra barra de favoritos

firefox_bookmarkets

 

3. Vamos a probarlo!

Navegamos en una página realizada en PHP. Adicionamos un breakpoint en el PHPStorm con un click izquierdo en la columna que se encuentra entre los números de línea y el código:

PHPStorm breakpoint

Presionamos en el botón que parece un teléfono

PHPStorm telephone

O en el menú Run → Start Listening for PHP Debug Connections

PHPStorm menu telephone

Vamos al navegador. Hacemos clic en nuestro marcador “Start Debugger” y refrescamos la página.

Firefox start debug

PHPStorm debería mostrar una ventana, pidiendo permiso para comenzar a depurar:

PHPStorm incoming connection

Al aceptar, podemos comenzar a ejecutar paso a paso nuestro código.

Ventana de herramientas para depurar:

PHPStorm toolbox

  1. Barra de herramientas para depurar, en esta podremos omitir todos los breakpoints, detener o continuar la ejecución de nuestro código.

  2. El panel Frames, tendremos acceso a las sucesivas llamadas que se han hecho hasta llegar a nuestro breakpoint.

  3. El panel Variables, en esa se muestran todas las variables disponibles de nuestro ámbito hasta donde está detenida nuestra aplicación.

  4. El panel Watches, aquí podrá usted incluir sus variables más importante y así monitorearlas.

  5. La pestaña Console, esta mostrará información del sistema, mensajes de errores, y la salida y entrada de datos para nuestra aplicación.

Para depurando nuestro código, tenemos las siguientes opciones:

PHPStorm show execution point  (Show Execution Point) Al hacer clic en este botón nos muestra en que punto está detenida nuestra aplicación.

PHPStorm step over(Step Over) Al hacer clic en este botón podemos depurar linea por linea.

PHPStorm step into(Step Into) Al hacer clic en este botón hacemos que depure dentro de las funciones que llamamos. Por ejemplo:

PHPStorm function into

Al hacer Step into en la línea anterior podremos depurar dentro la función square y en la función sum. Si existen varias funciones, como es el caso y solo queremos entrar a una específica, debemos usar Run → Smart Step Into:

PHPStorm smart step into

Aquí especificamos que deseamos entrar solamente a la función sum.

PHPStorm force step into (Force Step Into) Al hacer clic en este botón obligamos al depurador a entrar a funciones que normalmente el “Step Into” no entraría, como son Librerías externas, Constructores, etc.

PHPStorm step out(Step Out) Al hacer clic en este botón hacemos que el depurador salga de la función actual, y se sitúe en la línea que le continua antes de que fue invocado.

PHPStorm run to cursor(Run to Cursor) Al hacer clic en este botón la depuración del programa avanza hasta el cursor, esto ocurre sin necesidad de utilizar un breakpoint.

PHPStorm evaluate expression  (Evaluate Expression) Al hacer clic en este botón se puede calcular el valor de una expresión durante la depuración.

Como usted puede apreciar en nuestro código usamos un foreach, usted se puede preguntar como hacer para evaluar una variable solo cuando cierta condición se cumpla, por ejemplo cuando $number == 7, normalmente deberíamos usar “Step over” una y otra vez y detenerse a evaluar cuando dicha condición se cumpla. PHPStorm tiene una característica llamada breakpoint condicionales, que cuando se cumpla una condición se detenga la ejecución de la aplicación, para crear uno solo basta hacer clic derecho en uno ya creado y adicionamos nuestra condición:

PHPStorm breakpoint conditionals

 

Entonces al cumplirse la condición, la ejecución del script se detendrá en ese punto.

Bueno espero que le haya sido útil este artículo y le sirva para desarrollar y ser más productivo en PHP.