Domanda

Come prevenire blocchi di codice di debug accidentalmente perde in ambiente di produzione quando si utilizza Progress 4GL?

È stato utile?

Soluzione 4

Una soluzione si basa sul presupposto che l'ambiente di sviluppo abbia una voce propath unica che non è disponibile in altri ambienti e che il codice viene ricompilato quando spostato:

&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

Utilizzo

Salva il file come " debug " (senza estensione) in una directory indicata da propath, quindi:

{debug}

 /* some debugging code here */

{debug/}

Altri suggerimenti

Di solito pubblico solo un evento speciale - debug-message. Nel mio ambiente di sviluppo c'è una voce di menu nell'applicazione che aprirà una finestra che si iscrive al messaggio di debug ovunque e visualizza tutti i messaggi generati. Quindi posso inserire messaggi di debug nel mio codice e quindi aprire la finestra se voglio vedere i messaggi. Se dimentico di riordinare il codice di debug, gli utenti live non vedono alcun messaggio, anche se posso ancora aprire la finestra di debug per vedere cosa sta succedendo.

(La versione webspeed di questo scriverebbe semplicemente l'output in un file OS)

Se il database di test e i database di produzione hanno nomi diversi, è possibile utilizzare questo codice:

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

Simile alla mia altra risposta circa le affermazioni di, si può impostare un include che sarà vuota su siti di produzione contenente il flag di debug.Sviluppo siti, basta definire il valore in modo che il debug di codice è incluso nel vostro programma.

Avvolgendo il codice in un preprocessore il compilatore omettere il codice di debug del tutto quando si compila su un sito di produzione.

&se definito( debugalert ) <> 0 e quindi
&endif

Si potrebbe quindi utilizzare il "&global-define debug" nelle versioni di codice in cui si desidera inserire il codice di debug.Non la definizione di "debug" dovrebbe causare il compilatore di omettere il codice.


/* debug.tralascio la seguente produzione */

&GLOBAL-DEFINIRE DEBUGALERT


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

DEF VAR h_ct COME INT N-ANNULLA

FARE h_ct = 1 A 10:

&SE DEFINITO( DEBUGALERT ) <> 0 e QUINDI

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

&ENDIF

FINE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top