¿Cómo depuras plugins?
Soy bastante nuevo en la creación de plugins y he tenido dificultades para depurar.
He usado muchos echo y resulta desordenado y poco elegante.
Estoy seguro de que hay una mejor manera de hacer esto, ¿tal vez un IDE con un depurador donde pueda ejecutar todo el sitio incluyendo el plugin?

Ve al archivo wp-config.php y cambia define('WP_DEBUG', false);
por define('WP_DEBUG', true);
. Además, instala el plugin Log Deprecated Notices de Andrew Nacin.

También te recomendaría echar un vistazo al otro artículo de Nacin: http://www.andrewnacin.com/2010/04/23/5-ways-to-debug-wordpress/

Con PHP 5.4+ probablemente te verás inundado de avisos E_STRICT. Coloca este gist en la carpeta de plugins y actívalo para eliminar los avisos Strict, desactívalo para volver a tu configuración normal.

Si estás recibiendo errores impresos, entonces x-debug es una extensión brillante de PHP que añade trazas de ejecución modernas a PHP.
Si estás intentando averiguar qué está pasando cuando no hay errores, mi enfoque favorito es definir una función que registre su salida en un archivo. Así que uso plog($variable) y eso aparece en el archivo de registro que luego puedo examinar. Esto es especialmente útil cuando estás intentando averiguar qué ocurrió antes de que se llame a header(), o en otras situaciones donde no puedes imprimir en STDOUT.

Utiliza xdebug + NetBeans IDE. Cuando esté completamente configurado - lo cual es fácil de hacer - puedes establecer puntos de interrupción en tu plugin y observar las variables en esos puntos. Creo que es la mejor manera de depurar plugins o cualquier aplicación PHP en general.

Después de probar varios IDE, me decidí por el sencillo Notepad++ con un esquema de colores para resaltado de sintaxis ultra personalizado.
Tengo configurada una macro de modo que cuando presiono Shift-Ctrl-X, se inserta el siguiente código donde está mi cursor:
echo "<pre>";
var_dump($);
echo "</pre>";
exit();
Es simple, pero generalmente puedo detectar el 90% de mis errores con esta macro además de tener WP_DEBUG activado.

Depuro a la antigua, usando error_log()
y var_dump()
. Encuentro que es la forma más eficiente para mí, tengo un par de funciones wrapper para manejar diferentes tipos de datos, ya que hacer error_log
de arrays y objetos puede ser engorroso. Además, usar print_r()
puede ser difícil de leer cuando no está dentro de un <pre>
. Tengo tj_log()
para logs de errores y tj()
para mostrar salida (que básicamente muestra cualquier tipo de dato de manera presentable:
function tj( $code ) {
?>
<style>
.tj_debug { word-wrap: break-word; white-space: pre; text-align: left; position: relative; background-color: rgba(0, 0, 0, 0.8); font-size: 11px; color: #a1a1a1; margin: 10px; padding: 10px; margin: 0 auto; width: 80%; overflow: auto; -moz-box-shadow:0 10px 40px rgba(0, 0, 0, 0.75); -webkit-box-shadow:0 10px 40px rgba(0, 0, 0, 0.75); -moz-border-radius: 5px; -webkit-border-radius: 5px; text-shadow: none; }
</style>
<br /><pre class="tj_debug">
<?php
if ( is_null( $code ) || is_string($code) || is_int( $code ) || is_bool($code) || is_float( $code ) ) :
var_dump( $code );
else :
print_r( $code );
endif;
echo '</pre><br />';
}
function tj_log( $code ) {
if ( is_null( $code ) || is_string($code) || is_int( $code ) || is_bool($code) || is_float( $code ) ) :
$code = var_export( $code, true );
else :
$code = print_r( $code, true );
endif;
error_log( $code );
}
Así que simplemente hago: tj( $current_user );
o lo que sea.

Escribí una pequeña clase para crear un archivo de registro, es muy útil cuando estás depurando llamadas AJAX.
http://github.com/hunk/Magic-Fields/blob/master/tools/debug.php
Solo necesitas hacer algo como:
Debug::log("Este es un mensaje de depuración");
Cuando esa línea se ejecute, el mensaje será añadido al archivo de registro y después podrás usar el comando tail (si estás usando algún sistema operativo estilo Unix)
tail -f miarchivoregistro.log
También puedes pasar a esta función un array o un objeto.
Nota: necesitas cambiar la línea 20 por una ruta donde quieras guardar tu archivo de registro

Utilizo Aptane IDE en Linux y UltraEdit en Windows, y este último también tiene un analizador PHP. Además, visualizo todas las sugerencias de xDebug con la constante WP_DEBUG
definida en wp-config.php
.
Consulta también mi publicación sobre este tema y no dudes en comentar y dar tu opinión sobre tus herramientas de desarrollo.

Te recomiendo que eches un vistazo a FirePHP. Puedes enviar información de depuración al Firebug de Firefox a través de cabeceras HTTP, lo que generalmente proporciona una salida de depuración más limpia.

No está tan mal tampoco: Eclipse. Está cerca de PhpStorm y además es gratuito.

Hay dos IDEs que puedo recomendar y que he usado ampliamente: PhpED (solo para Windows) y PhpStorm+XDEBUG (Mac, Windows y Linux). Actualmente estoy en Mac, así que solo puedo usar el segundo.
¡Ambos son increíbles! La buena noticia es que PhpStorm cuesta $49 antes de septiembre de 2010 y solo $99 después de esa fecha. Si estuviera en Windows y tuviera que elegir de nuevo, no estoy seguro cuál escogería.
Francamente, no puedo evitar sentir que cualquier desarrollador de plugins que no use una de estas dos herramientas está severamente limitado, especialmente si son relativamente nuevos en el desarrollo de plugins para WordPress.

Krumo - la clase de depuración de PHP con estilo
Otra cosa realmente genial es la clase PHP "krumo". Se implementa en ½ minuto y ofrece una forma sencilla de depurar todo tipo de variables:
- objetos,
- arrays,
- strings/float/integer/etc.
Además ayuda con el backtracing, muestra las clases cargadas o archivos incluidos y todo bajo demanda.
Y además ¡es GRATIS!
Descarga
Krumo @sourceforge

Utilizo un plugin de $13 llamado LogPress que puedes comprar en ThemeForest y es absolutamente increíble. Puedes depurar todo lo relacionado con sus plugins y el sitio. Soporta registro en la consola de Firebug y mucho más. No puedo vivir sin él, así de mucho uso este plugin.
Este plugin es probablemente el mejor dinero que he gastado y me ha ahorrado innumerables horas en el desarrollo de plugins para WordPress.

¡Vaya, me votaron en contra por recomendar un plugin de pago con el que no tengo ninguna asociación? ¿No es eso un poco excesivo?

No soy quien te votó en contra, pero no me sorprende. Usas palabras como si estuvieras tratando de vender el plugin. Recomendar cosas está bien, pero presionar con un discurso de venta agresiva como "una bendición absoluta de Dios". La gente odia la publicidad. Solo modera el lenguaje y la recomendación hablará por sí misma.

Estoy usando phpED y xdebug pero para mí (y parece que para otros también) ¡es imposible depurar los archivos de plugins o del tema! ¡El depurador solo se detiene en los puntos de interrupción que están en los archivos principales o del "core" original! ¿Alguien puede ayudarme?

Primero agrego define('WP_DEBUG', false);
al archivo wp-config.php (como la mayoría de la gente recomienda) en mi instalación local, que es una copia reciente de un sitio de producción relevante (tanto archivos como datos). Esto hace que las cosas sean rápidas, seguras, separadas pero refleja bien al menos un lugar donde el plugin realmente se utilizará.
También agrego el plugin Debug Bar junto con algunos de los complementos de Debug Bar (como Transients, por ejemplo) - según corresponda para tus plugins.
También uso el complemento Firebug para Firefox, que es excelente para ayudar a rastrear problemas de HTML, CSS y JavaScript, así como para investigar rarezas de diseño.
Programo usando UltraEdit, que he utilizado durante más de 15 años para todo tipo de codificación (desde PHP hasta SQL) tanto en el trabajo como en casa, por lo que funciona bien para mí, aunque quizás no tenga suficientes funciones para considerarse un IDE para muchas personas. Tiene resaltado de sintaxis, autocompletado y funciones de diseño de código, además de un conjunto de herramientas de acceso rápido para HTML y CSS que pueden ayudar a evitar errores tipográficos y similares. Principalmente, esto me brinda familiaridad, que es un aspecto importante que a menudo se pasa por alto en la prisa por lo nuevo. La memoria muscular ayuda a la repetibilidad, incluso en la codificación.
Y, por supuesto, normalmente tengo alguna página apropiada del codex abierta en otra pestaña como ejemplo adecuado.
Todos estos elementos ayudan de diferentes maneras a resaltar errores de codificación, análisis, funcionales y de diseño, y no interfieren mucho en cómo programo o si nada anda mal. La mayoría pueden ignorarse o desactivarse por un tiempo si estás experimentando o trabajando en algo que revisarás más tarde.
Ah, y no hay nada malo en un echo o print_r bien posicionado para verificar algo en un momento clave (siempre y cuando los elimines cuando hayas terminado).

Echa un vistazo a Query Monitor combinado con Query Monitor Extend para una depuración exhaustiva de WordPress (errores PHP/notices/stricts/warnings, consultas a la base de datos, rutas, constantes, peticiones HTTP, transients, variables de sesión, var dumps).
También revisa los plugins All Post Meta y Saving What para información específica sobre posts.

Solo ve a su sitio de ayuda: https://www.jetbrains.com/help/phpstorm/2016.2/configuring-xdebug.html
