Debugging

En este artículo te mostramos algunas técnicas que te servirán para encontrar y corregir errores cuando estás implementando un sitio Prontus.

Publicado: Martes 25 de Septiembre de 2018 por Adriano Varoli Piazza
Última modificación: Viernes 26 de Octubre de 2018
Debug de errores en plantillas

Típicamente los errores que encuentres en plantillas ocurren al usar marcas Prontus incorrectamente:

  • si intentas usar una marca de texto (aquellas con prefijo "txt_" o "vtxt_") sin el prefijo. Esto en particular vale en las condiciones de los operadores lógicos. Por ejemplo, esto nunca mostrará el código que pongas dentro de la marca IF:
    %%if(_bajada ~ Viva Chile tu cielo)%%
    ...
    %%/if%%
    porque el nombre de la marca es _txt_bajada, no _bajada, entonces la condición (si la marca _txt_bajada contiene el texto "Viva Chile tu cielo") siempre será falsa.
  • Si no cierras correctamente una marca, como por ejemplo en el código siguiente
    %%_txt_titular.raw% (aquí deberían haber dos '%')
    verás el siguiente error:
    *** Error en Marcas Prontus ***
    (estamos trabajando para hacer menos críptico este mensaje).
  • En Prontus 11 era posible quitar el prefijo txt_ o vtxt_ de una marca de texto para mostrar el texto limpio, sin etiquetas HTML. En Prontus 12 esto ya no funciona, debes usar la salida .raw:
    <h1>%%_txt_titular.raw%%</h1>
  • Si no cierras correctamente una marca de lógica, como IF o NIF, Prontus escribirá un mensaje de error en la página avisándote, como por ejemplo
    "Error en marcas if: la cantidad de aperturas[4] es distinta de la cantidad de cierres[3]"
  • Si usas la marca IFVC en un LOOP sin acompañarla de al menos un IFV final, verás un error como el siguiente:
    Error en Loop: Sentencia IFVC debe ir acompañada de a lo menos un IFV.
Debug de errores en CGIs

Si estás extendiendo las funcionalidades de Prontus, ya sea escribiendo postprocesos, nuevas soluciones o nuevas CGIs para el núcleo de Prontus, te servirán las siguientes consideraciones:

  • En tus CGIs y módulos Perl siempre deberías usar las directivas use strict; use warnings; . Esta es la base para evitar muchos dolores de cabeza.
  • Si creaste la CGI extendiendo otra CGI existente, tendrás acceso a un log de errores específico. El código relevante es el siguiente:
    # Captura STDERR
    use lib_stdlog;
    &lib_stdlog::set_stdlog($0, 51200);
    Estas líneas hacen que Prontus genere un archivo de log específico. Por ejemplo, si creas un nuevo postproceso "generar_correlaciones.cgi" en /cgi-cpn/pproc/, Prontus generará un nuevo archivo /cgi-cpn/pproc/prontus_error_log/generar_correlaciones.cgi.error.log y lo actualizará cada vez que se gatille esa CGI. Además, Prontus rotará los archivos de log automáticamente. Mientras programas y haces pruebas puedes tener abierta una terminal con la salida de ese log usando el siguiente comando:
    tail -f /cgi-cpn/pproc/prontus_error_log/generar_correlaciones.cgi.error.log
  • Si la CGI falla completamente por un error de sintaxis de Perl posiblemente no veas ninguna salida, ni en el navegador ni en la consola. Para validar la sintaxis de tus scripts Perl puedes usar el comando
    [usuario del webserver]$ perl -cw [ruta al script]
    que te devolverá ya sea un mensaje "Syntax OK" o una lista con los errores encontrados.
  • Si tu CGI parece no funcionar para nada, asegúrate que tenga permisos de ejecución. Puedes darle los permisos correctos con el comando
    [usuario del webserver]$ chmod 755 [ruta al script]

Artículos Relacionados