Depuración

Resumen

Esta página explica cómo depurar el servidor y las apps: el modo de depuración, dónde se registran los errores, cómo inspeccionar variables, cómo usar XDebug, cómo depurar JavaScript, plantillas y consultas SQL de MariaDB, y el uso de directorios de apps alternativos. Está dirigida a quienes desarrollan sobre la plataforma.

Fuente: documentación de Nextcloud, «developer_manual/digging_deeper/debugging», versión 3ad9158, licencia CC BY 3.0; traducida y adaptada para APS Conecta Gestión.

Modo de depuración

Cuando el modo de depuración está activado en APS Conecta Gestión, se activan diversas funciones de depuración; ver la documentación de depuración. Para activarlo, establecer debug en true en /config/config.php:

<?php
$CONFIG = array (
    'debug' => true,
    ... configuration goes here ...
);

Identificar errores

APS Conecta Gestión usa un manejo de errores de PHP personalizado que impide que los errores se impriman en los archivos de registro del servidor web o en la salida de la línea de comandos. En su lugar, los errores se guardan generalmente en el propio archivo de registro de APS Conecta Gestión, ubicado en: /data/nextcloud.log

Depurar variables

Si se necesita depurar manualmente valores de variables, se deben usar excepciones, y no alternativas como trigger_error() (que puede no registrarse).

p. ej.:

<?php throw new \Exception( "\$user = $user" ); // should be logged in Nextcloud ?>

no:

<?php trigger_error( "\$user = $user" ); // may not be logged anywhere ?>

Para desactivar el manejo de errores personalizado de APS Conecta Gestión (y que PHP y el servidor web manejen los errores en su lugar), ver Modo de depuración.

Usar un depurador de PHP (XDebug)

Usar un depurador conectado a PHP permite recorrer el código línea a línea, ver las variables en cada línea e incluso cambiar valores mientras el código se ejecuta. El depurador estándar de facto para PHP es XDebug, disponible como paquete instalable en muchas distribuciones. Sin embargo, solo proporciona la parte de PHP, por lo que se necesita un frontend para controlar realmente XDebug. Una vez instalado, debe activarse en php.ini, junto con algunos parámetros para permitir las conexiones con la interfaz de depuración:

zend_extension=/usr/lib/php/modules/xdebug.so
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

XDebug intentará ahora (cuando esté activado) conectarse a localhost en el puerto 9000 y se comunicará mediante el protocolo estándar DBGP. Este protocolo lo admiten muchas interfaces de depuración, como las siguientes, que son populares:

  • vdebug - cliente depurador DBGP multilenguaje para Vim

  • SublimeTextXdebug - cliente de XDebug para Sublime Text

  • PHPStorm - depurador DBGP integrado

Para más información, ver la documentación de XDebug: https://xdebug.org/docs/remote

Una vez que se conoce el funcionamiento del cliente de depuración, se puede empezar a depurar con XDebug. Para probar APS Conecta Gestión a través de la interfaz web u otras solicitudes HTTP, establecer la cookie o el parámetro POST XDEBUG_SESSION_START. Como alternativa, hay extensiones de navegador que lo facilitan:

Para depurar scripts en la línea de comandos, como occ o las pruebas unitarias, establecer la variable de entorno XDEBUG_CONFIG.

Depurar JavaScript

De forma predeterminada, todos los archivos JavaScript de APS Conecta Gestión se minifican (comprimen) en un único archivo sin espacios en blanco. Para evitarlo, ver Modo de depuración.

Depurar HTML y plantillas

De forma predeterminada, APS Conecta Gestión almacena en caché el HTML generado por las plantillas. Esto puede impedir, por ejemplo, que los cambios en las plantillas de las apps se apliquen al recargar la página. Para desactivar la caché, ver Modo de depuración.

Depurar consultas SQL

Al encontrar errores de base de datos durante consultas o migraciones, puede ser útil obtener un registro completo de las consultas.

Depurar consultas de MariaDB

MariaDB puede registrar todas las consultas en un archivo o en una tabla.

SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'table';

Estos ajustes globales activan el registro sobre la marcha. No es necesario reiniciar la base de datos.

SELECT * FROM mysql.general_log

Esto consulta todas las consultas registradas.

Nota

En la integración continua, este truco puede dar con bastante facilidad las SQL de varios tipos y versiones de una base de datos, por si hay que depurar una matriz de configuraciones.

Usar directorios de apps alternativos

Puede ser útil tener varios directorios de apps con fines de prueba, para poder alternar cómodamente entre distintas versiones de las aplicaciones. Ver la documentación del archivo de configuración para más detalles.