Pregunta

¿Cómo evitaría que fragmentos de código de depuración se filtren accidentalmente en el entorno de producción al usar Progress 4GL?

¿Fue útil?

Solución 4

Una solución se basa en el supuesto de que el entorno de desarrollo tiene una entrada de propagación única que no está disponible en otros entornos y que el código se vuelve a compilar cuando se mueve:

&IF DEFINED(DEBUGGING) = 0 &THEN
    &IF PROPATH MATCHES '*development*' &THEN 
        &GLOBAL-DEFINE DEBUGGING TRUE
    &ELSE
        &GLOBAL-DEFINE DEBUGGING FALSE
        &MESSAGE Remove debugging: search for DEBUG within the code. 
    &ENDIF        
&ENDIF                                

&IF DEFINED(DEBUGGING_STARTED) = 0 &THEN
    &GLOBAL-DEFINE DEBUGGING_STARTED TRUE
    IF {&DEBUGGING} THEN
    DO:
&ELSE
    END.
    &UNDEFINE DEBUGGING_STARTED
&ENDIF

Usuario

Guardar archivo como " debug " (sin extensión) a un directorio señalado por propath, luego:

{debug}

 /* some debugging code here */

{debug/}

Otros consejos

Normalmente publico un evento especial: mensaje de depuración. En mi entorno de desarrollo hay un elemento de menú en la aplicación que activará una ventana que suscribe el mensaje de depuración en cualquier lugar y muestra los mensajes generados. Entonces puedo insertar mensajes de depuración en mi código y luego abrir la ventana si quiero ver los mensajes. Si me olvido de ordenar el código de depuración, los usuarios en vivo no verán ningún mensaje, aunque todavía puedo abrir la ventana de depuración para ver qué sucede.

(La versión de velocidad web de esto solo escribiría la salida en un archivo OS)

Si su base de datos de prueba y de producción tienen nombres diferentes, puede usar este código:

IF DBNNAME = "TESTDB" THEN
DO:
  <DEBUG CODE>
END.

Similar a mi otra respuesta sobre las afirmaciones, puede configurar una inclusión que estará vacía en los sitios de producción que contienen el indicador de depuración. En los sitios de desarrollo solo necesita definir el valor para que su código de depuración se incluya en su programa.

Al envolver el código en un preprocesador, el compilador omitirá el código de depuración por completo cuando lo compile en un sitio de producción.

& amp; si está definido (debugalert) < > 0 & Amp; luego
&endif

You would then use the "&global-define debug" in versions of the code you want to contain the debug code. Not defining "debug" should cause the compiler to omit the code.


/* debug.i omit the following on production */

&GLOBAL-DEFINE DEBUGALERT


/* test.p */ {debug.i}

DEF VAR h_ct AS INT NO-UNDO

DO h_ct = 1 TO 10:

&IF DEFINED( DEBUGALERT ) <> 0 &THEN

    MESSAGE "debug message" h_ct.
    <debug code goes here>

& amp; ENDIF

FIN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top