Question

Comment empêcheriez-vous des fragments de code de débogage de fuir accidentellement dans l'environnement de production en utilisant Progress 4GL?

Était-ce utile?

La solution 4

Une solution repose sur l'hypothèse que l'environnement de développement a une entrée unique propath qui n'est pas disponible dans d'autres environnements et que le code est recompilé lorsqu'il est déplacé:

&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

Utilisation

Enregistrer le fichier sous " déboguer " (sans extension) vers un répertoire pointé par propath, puis:

{debug}

 /* some debugging code here */

{debug/}

Autres conseils

Habituellement, je ne fais que publier un événement spécial - debug-message. Dans mon environnement de développement, un élément de menu de l'application ouvre une fenêtre qui s'abonne à un message de débogage n'importe où et affiche tous les messages générés. Je peux donc insérer des messages de débogage dans mon code, puis ouvrir la fenêtre si je veux voir les messages. Si j'oublie de ranger le code de débogage, les utilisateurs en direct ne voient aucun message, même si je peux toujours ouvrir la fenêtre de débogage pour voir ce qui se passe.

(La version webspeed de ceci écrirait simplement la sortie dans un fichier du système d'exploitation)

Si votre base de données de test et vos bases de données de production ont des noms différents, vous pouvez utiliser ce code:

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

Semblable à mon autre réponse concernant les assertions, vous pouvez configurer une inclusion qui sera vide sur les sites de production contenant le drapeau de débogage. Sur les sites de développement, il vous suffit de définir la valeur pour que votre code de débogage soit inclus dans votre programme.

En encapsulant le code dans un pré-processeur, le compilateur omet totalement le code de débogage lorsque vous le compilez sur un site de production.

& si défini (debugalert) < > 0 & Amp; alors
&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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top