{"id":230427,"date":"2022-12-06T18:40:00","date_gmt":"2022-12-06T15:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230427"},"modified":"2022-12-07T12:18:23","modified_gmt":"2022-12-07T09:18:23","slug":"instalacion-de-xdebug-parte-1-el-modulo-xdebug","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/instalacion-de-xdebug-parte-1-el-modulo-xdebug\/","title":{"rendered":"Instalaci\u00f3n de Xdebug, Parte 1: El m\u00f3dulo Xdebug"},"content":{"rendered":"\n<p>Por ahora, hemos cubierto mucho terreno relacionado con el trabajo con WordPress y la depuraci\u00f3n. Y esto es especialmente cierto en lo que respecta al trabajo con herramientas y complementos disponibles en WordPress. Si acaba de unirse a esta serie en particular, aseg\u00farese de estar al d\u00eda con las siguientes publicaciones:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/lectura-y-comprension-de-los-registros-de-errores-de-wordpress-parte-1\/\" title=\"Lectura y comprensi\u00f3n de los registros de errores de WordPress, Parte 1\">Lectura y comprensi\u00f3n de los registros de errores de WordPress, Parte 1<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/es\/lectura-y-comprension-de-los-registros-de-errores-de-wordpress-parte-2\/\" title=\"Lectura y comprensi\u00f3n de los registros de errores de WordPress, parte 2\">Lectura y comprensi\u00f3n de los registros de errores de WordPress, parte 2<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/tommcfarlin.com\/debugging-within-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Depuraci\u00f3n b\u00e1sica dentro de WordPress<\/a><\/strong><\/li>\n<\/ul>\n<p>En el post anterior, recuerda que dije lo siguiente:<\/p>\n<blockquote>\n<p>Pero si est\u00e1 buscando ingresar al mundo de la depuraci\u00f3n pr\u00e1ctica y profesional desde su IDE, entonces es importante comprender qu\u00e9, c\u00f3mo y por qu\u00e9.<\/p>\n<\/blockquote>\n<p>Y finalmente estamos listos para ver lo que esto requiere. Sin embargo, para comenzar, significa que debemos comprender algunas cosas sobre <strong><a href=\"https:\/\/xdebug.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Xdebug<\/a><\/strong>, la terminolog\u00eda y tener un IDE que sea consistente para todos los que lean esta serie en particular.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162717-61e743dbd5b19.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162717-61e743dbd5b19.png\" alt=\"Instalaci\u00f3n de Xdebug, Parte 1: El m\u00f3dulo Xdebug\"><\/a><\/p>\n<p>As\u00ed que esto se dividir\u00e1 en dos partes.<\/p>\n<ul>\n<li>Primero, veremos la terminolog\u00eda requerida para la depuraci\u00f3n y nos aseguraremos de tener una configuraci\u00f3n IDE adecuada en nuestro entorno de desarrollo.<\/li>\n<li>A continuaci\u00f3n, veremos c\u00f3mo asegurarnos de haber instalado correctamente Xdebug y luego conectarlo a nuestro entorno de desarrollo para que podamos ponerlo a trabajar.<\/li>\n<\/ul>\n<p>Si ha le\u00eddo una variedad de contenido a lo largo de este blog en los \u00faltimos a\u00f1os, algo de esto puede parecerle familiar. Si no, no es gran cosa. Recuerde que el objetivo es asegurarse de que todos estemos al mismo nivel a medida que avanzamos con el trabajo mencionado anteriormente y durante el resto de la serie.<\/p>\n<p>Dicho esto, comencemos.<\/p>\n<h2>Instalaci\u00f3n de Xdebug, Parte 1<\/h2>\n<p>Como se mencion\u00f3 anteriormente, este conjunto de publicaciones servir\u00e1 para uno de los dos prop\u00f3sitos, los cuales se pueden describir sucintamente (el segundo de los cuales se describir\u00e1 en la pr\u00f3xima publicaci\u00f3n):<\/p>\n<ol>\n<li>Terminolog\u00eda de depuraci\u00f3n<\/li>\n<li>Instalaci\u00f3n de un IDE<\/li>\n<\/ol>\n<p>Aunque muchos de los que lean esto ya estar\u00e1n familiarizados con parte de la terminolog\u00eda (especialmente si ha usado herramientas del lado del cliente o incluso herramientas del lado del servidor antes), y ya tiene un editor de elecci\u00f3n, es importante asegurarse de que estamos al menos trabajando con una base consistente.<\/p>\n<p>Si conf\u00eda en sus habilidades en los dos puntos mencionados anteriormente, es probable que la pr\u00f3xima publicaci\u00f3n sea m\u00e1s interesante para usted. Si, por otro lado, esto te est\u00e1 introduciendo en un nuevo territorio, deber\u00eda sentar las bases para todo lo que necesitas para asegurarte de que est\u00e1s depurando con \u00e9xito los proyectos en WordPress.<\/p>\n<p>Adem\u00e1s, se asegurar\u00e1 de que tenga un conjunto coherente de herramientas con las que trabajar para que podamos seguir avanzando con un conjunto est\u00e1ndar de herramientas para crear el entorno de desarrollo m\u00e1s productivo posible.<\/p>\n<h3>1 Terminolog\u00eda de depuraci\u00f3n<\/h3>\n<p>Dependiendo de sus antecedentes, podr\u00eda argumentar que hay entre cinco y siete t\u00e9rminos, cada uno de los cuales est\u00e1 relacionado con la depuraci\u00f3n. Lo he esbozado antes en otras publicaciones en este sitio. Cada vez, sin embargo, lo he hecho con una versi\u00f3n un poco diferente del contenido.<\/p>\n<p>En esta publicaci\u00f3n, mi objetivo es tratar de hacer esto lo m\u00e1s exacto y preciso posible para que proporcione una referencia consistente que podamos usar en las publicaciones (y en el trabajo) por venir. Tal como est\u00e1 ahora, estos son los t\u00e9rminos que creo que todos deber\u00edan saber en relaci\u00f3n con su depurador.<\/p>\n<ol>\n<li><strong>Puntos de ruptura<\/strong>. Estos pueden considerarse los bloques fundamentales de la depuraci\u00f3n. En pocas palabras, son lugares en el c\u00f3digo en los que desea pausar la ejecuci\u00f3n para poder examinar lo que sucede en el c\u00f3digo. Quiz\u00e1s esto tenga que ver con las variables; quiz\u00e1s tenga que ver con funciones, quiz\u00e1s tenga que ver con otra cosa. Independientemente, esto es importante porque le est\u00e1 diciendo al programa &quot;oye, quiero detener la ejecuci\u00f3n del programa aqu\u00ed mismo en esta l\u00ednea para poder investigar el estado del programa&quot;.<\/li>\n<li><strong>relojes<\/strong> _ Estas son llamadas a funciones, variables u otros lugares en el c\u00f3digo que pueden configurarse de manera que podamos ver literalmente c\u00f3mo cambian los valores a lo largo de la ejecuci\u00f3n. Si estamos hablando de funciones, entonces podr\u00edamos estar refiri\u00e9ndonos a los valores de los argumentos a medida que se establecen y manipulan dentro de una funci\u00f3n. Si estamos hablando de variables, estamos hablando de variables; entonces estamos hablando de los valores que tienen en cualquier punto dado durante la ejecuci\u00f3n del programa. Esto puede ser cuando establecemos un punto de interrupci\u00f3n espec\u00edfico, o puede ser cada vez que repasamos el c\u00f3digo y vigilamos el estado de la variable a lo largo de la ejecuci\u00f3n del programa.<\/li>\n<li><strong>Empezar<\/strong> _ Esta acci\u00f3n simplemente le dice al depurador que comience a monitorear el servidor web. Esencialmente, est\u00e1 vigilando todo lo que sucede dentro del programa y, si se establecen puntos de interrupci\u00f3n, est\u00e1 preparado para detener la ejecuci\u00f3n y permitirnos ver qu\u00e9 sucede con el estado del programa. T\u00e9cnicamente, puede iniciar una sesi\u00f3n de depuraci\u00f3n y no hacer nada en absoluto. No es exactamente productivo, pero es posible.<\/li>\n<li><strong>Entra en<\/strong>. Suponga por un momento que tiene un punto de interrupci\u00f3n establecido justo encima de una llamada de funci\u00f3n o en una invocaci\u00f3n de funci\u00f3n. Esto nos permite ingresar a la funci\u00f3n para monitorear el valor de cada argumento, c\u00f3mo se manipulan dentro de la funci\u00f3n, qu\u00e9 devuelve la funci\u00f3n (si es que hay algo) y todo lo que sucede dentro de la funci\u00f3n.<\/li>\n<li><strong>Pasar por encima<\/strong>. Por otro lado, suponga que est\u00e1 recorriendo la funci\u00f3n y no est\u00e1 seguro de querer sumergirse en ella. Tal vez solo le interesen los valores que devuelve la funci\u00f3n o el estado del programa despu\u00e9s de que se haya ejecutado la funci\u00f3n, pero no le interesa lo que sucedi\u00f3 dentro de la funci\u00f3n. En esencia, lo tratas como una caja negra. Eso es lo que significa pasar por encima de una funci\u00f3n. Es decir, deja que la funci\u00f3n se ejecute sin entrar en ella para ver c\u00f3mo funciona.<\/li>\n<li><strong>Paso fuera<\/strong>. Este aspecto particular de la depuraci\u00f3n es \u00fatil cuando se encuentra en una funci\u00f3n y est\u00e1 listo para volver a la l\u00ednea principal de ejecuci\u00f3n porque ha visto todo lo que necesita ver. Tal vez hayas visto cambiar los valores de una variable, tal vez hayas visto un algoritmo hacer suficiente trabajo para saber que ha hecho lo que quieres. Cualquiera que sea el caso, esto le permitir\u00e1 salir de la funci\u00f3n, acertadamente nombrada, y luego pasar a la<\/li>\n<li><strong>Detener<\/strong> _ As\u00ed como start le dice al depurador que <strong>comience<\/strong> a escuchar al servidor, prestando atenci\u00f3n a los puntos de interrupci\u00f3n y mostrando informaci\u00f3n sobre el progreso de la aplicaci\u00f3n, stop hace exactamente lo contrario. Le dice al depurador que hemos terminado de escuchar, mirar y prestar atenci\u00f3n al estado del programa. Esto no significa que el programa se detenga, solo el depurador. Entonces, si ha terminado de prestar atenci\u00f3n a toda la informaci\u00f3n proporcionada por el depurador, es probable que est\u00e9 en condiciones de detener el depurador.<\/li>\n<\/ol>\n<p>Una nota final que me gustar\u00eda hacer es que PHP es \u00fanico en el sentido de que ofrece una variedad de variables de acceso p\u00fablico, como <strong><a href=\"https:\/\/secure.php.net\/manual\/en\/reserved.variables.get.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$_GET<\/a> ,<\/strong> <a href=\"https:\/\/secure.php.net\/manual\/en\/reserved.variables.post.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$_POST<\/a>, <a href=\"https:\/\/secure.php.net\/manual\/en\/reserved.variables.request.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$_REQUEST<\/a>, etc. Estas tambi\u00e9n son variables que est\u00e1n disponibles para nosotros y que podemos observar. No se limita solo a lo que tenemos escrito en nuestro c\u00f3digo.<\/p>\n<p>Esto es especialmente \u00fatil ya que estamos buscando datos en recargas de p\u00e1gina, solicitudes Ajax (como durante las acciones GET y POST), etc.<\/p>\n<h3>2 Instalaci\u00f3n de Xdebug<\/h3>\n<p>Aunque es probable que sea evidente por las publicaciones anteriores de esta serie, usar\u00e9 <strong><a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Visual Studio Code<\/a><\/strong> como mi IDE de elecci\u00f3n. Si no tienes uno, entonces este es uno que te recomiendo. Sin embargo, si tiene un IDE con el que se siente c\u00f3modo, entonces este es uno que le recomiendo.<\/p>\n<ul>\n<li>El c\u00f3digo siempre est\u00e1 en desarrollo,<\/li>\n<li>tiene una econom\u00eda activa de extensiones,<\/li>\n<li>funciona bien con una variedad de lenguajes, herramientas, etc.<\/li>\n<li>es liviano y funciona bien con las diversas cosas que podemos usar en el desarrollo de WordPress (como PHP, HTML y JavaScript).<\/li>\n<\/ul>\n<p>Adem\u00e1s, <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/visual-studio-code\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Code<\/a><\/strong> tambi\u00e9n tiene un s\u00f3lido soporte para Xdebug. Sin embargo, para asegurarnos de que el depurador est\u00e9 correctamente instalado, debemos asegurarnos de que tenemos la extensi\u00f3n instalada con nuestra instalaci\u00f3n de PHP, que est\u00e1 disponible en todo nuestro sistema y que se puede ejecutar dentro de nuestro IDE. Vamos a considerar hacer esto, pero primero, debemos asegurarnos de que Xdebug est\u00e9 instalado correctamente.<\/p>\n<h4>Instalando Xdebug<\/h4>\n<p>Instalar Xdebug es f\u00e1cil. Desde su sesi\u00f3n de terminal, deber\u00e1 ejecutar <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-16-install-xdebug-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el siguiente comando:<\/a><\/strong><\/p>\n<p>Una vez que lo haga, notar\u00e1 que suceden varias cosas dentro de la ventana del terminal a medida que se lleva a cabo la instalaci\u00f3n. A menos que est\u00e9 particularmente interesado, no necesita preocuparse por lo que est\u00e1 haciendo hasta que lo devuelva al s\u00edmbolo del sistema.<\/p>\n<p>En este punto, se ha instalado el m\u00f3dulo Xdebug; sin embargo, necesitar\u00e1 decirle a PHP que est\u00e1 instalado y d\u00f3nde puede encontrar el m\u00f3dulo.<\/p>\n<p>Para instalar la extensi\u00f3n con su versi\u00f3n actual de PHP, es importante saber qu\u00e9 versi\u00f3n de PHP tiene instalada. Si est\u00e1 utilizando un administrador de paquetes, entonces puede haber varias versiones y necesitar\u00e1 decirle al archivo de configuraci\u00f3n de esa versi\u00f3n en particular d\u00f3nde encontrar el m\u00f3dulo.<\/p>\n<p>Por el contrario, si tiene una sola versi\u00f3n instalada, entonces necesitar\u00e1 decirle a una sola versi\u00f3n de PHP d\u00f3nde est\u00e1 instalada. Primero, puede encontrar d\u00f3nde existe Xdebug en el sistema de archivos usando <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-17-find-xdebug-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">este comando:<\/a><\/strong><\/p>\n<p>Luego necesitar\u00e1 actualizar el archivo de configuraci\u00f3n para su instalaci\u00f3n de PHP. Para hacer esto, simplemente ejecute <strong>php -v<\/strong> desde la l\u00ednea de comandos y le dir\u00e1 qu\u00e9 versi\u00f3n est\u00e1 ejecutando. Desde aqu\u00ed, deber\u00e1 ubicar el archivo de inicializaci\u00f3n para la versi\u00f3n de PHP que est\u00e1 utilizando. Si, al ejecutar <strong>php -v,<\/strong> regresa con algo como esto:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162717-61e743e0189a7.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162717-61e743e0189a7.png\" alt=\"Instalaci\u00f3n de Xdebug, Parte 1: El m\u00f3dulo Xdebug\"><\/a><\/p>\n<p>Esto nos dice que estamos ejecutando PHP 7.1.19 (aunque su versi\u00f3n puede variar). A partir de aqu\u00ed, sabemos buscar un determinado archivo de configuraci\u00f3n de PHP para esta versi\u00f3n de PHP. Para hacer esto, busque <strong>php.ini<\/strong> en el directorio \/usr\/local\/etc\/php\/7.1\/ de su sistema (aunque el n\u00famero de versi\u00f3n exacto puede variar).<\/p>\n<p>Desde all\u00ed, abra el archivo y luego agregue <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-18-reference-xdebug-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la siguiente l\u00ednea de c\u00f3digo:<\/a><\/strong><\/p>\n<pre><code>zend_extension=\"\/usr\/local\/lib\/php\/pecl\/20160303\/xdebug.so\"<\/code><\/pre>\n<p>Esto le dir\u00e1 a PHP d\u00f3nde reside Xdebug para que pueda usarse dentro de su trabajo.<\/p>\n<h4>Prueba de la instalaci\u00f3n<\/h4>\n<p>Para comprobar que la instalaci\u00f3n ha ido correctamente, puedes ejecutar el siguiente c\u00f3digo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/426e02bcfc411d43be6715b3e84ead7e#file-19-verify-xdebug-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">en tu terminal:<\/a><\/strong><\/p>\n<p>Y luego deber\u00eda ver algo como el siguiente resultado en la pantalla:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162717-61e743e0189a7.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162717-61e743e0189a7.png\" alt=\"Instalaci\u00f3n de Xdebug, Parte 1: El m\u00f3dulo Xdebug\"><\/a><\/p>\n<p>Observe que en la captura de pantalla anterior, ve lo siguiente:<\/p>\n<blockquote>\n<p>con Xdebug v2.6.0, Copyright (c) 2002-2018, por Derick Rethans<\/p>\n<\/blockquote>\n<p>Esto significa que el m\u00f3dulo ha sido instalado y que PHP lo sabe.<\/p>\n<h2>Configurando su IDE<\/h2>\n<p>En la pr\u00f3xima publicaci\u00f3n, veremos c\u00f3mo vincular Xdebug a nuestro IDE. Suponiendo que haya seguido los pasos de esta publicaci\u00f3n y que todo haya ido bien, deber\u00eda estar listo para prepararse para depurar proyectos de WordPress.<\/p>\n<p>Sin embargo, hasta que no lo tengamos funcionando dentro de un IDE, no es tan \u00fatil (o es m\u00e1s dif\u00edcil de lo que deber\u00eda ser). Entonces, la pr\u00f3xima semana, veremos exactamente c\u00f3mo hacerlo.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En esta publicaci\u00f3n, cubrimos la instalaci\u00f3n de Xdebug para que est\u00e9 disponible en nuestra instalaci\u00f3n de PHP. Eventualmente, esto es lo que nos permitir\u00e1 depurar nuestro c\u00f3digo desde dentro de un IDE.<\/p>\n","protected":false},"author":1,"featured_media":236541,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,800],"tags":[1172],"class_list":["post-230427","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=230427"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230427\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/236541"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}