Предотвращение запуска отладочного кода с использованием Progress 4GL? - PullRequest
1 голос
/ 01 мая 2009

Как предотвратить случайную утечку фрагментов кода отладки в рабочую среду при использовании Progress 4GL?

Ответы [ 4 ]

5 голосов
/ 12 июня 2009

Я обычно просто публикую специальное событие - отладочное сообщение. В моей среде разработки в приложении есть пункт меню, который запускает окно, которое в любом месте прикрепляется к отладочному сообщению и отображает любые сгенерированные сообщения. Таким образом, я могу вставить отладочные сообщения в мой код и затем открыть окно, если я хочу видеть сообщения. Если я забуду привести в порядок код отладки, то живые пользователи не увидят никаких сообщений, хотя я все еще могу открыть окно отладки, чтобы увидеть, что происходит.

(версия Webspeed просто записывает вывод в файл ОС)

2 голосов
/ 05 мая 2009

Если ваша тестовая база данных и производственные базы данных имеют разные имена, вы можете использовать этот код:

IF DBNNAME = "TESTDB" THEN
DO:
  <DEBUG CODE>
END.
1 голос
/ 04 мая 2009

Подобно моему другому ответу об утверждениях, вы можете настроить включение, которое будет пустым на рабочих сайтах, содержащих флаг отладки. На сайтах разработки вам просто нужно определить значение, чтобы ваш код отладки был включен в вашу программу.

Оборачивая код в препроцессор, компилятор полностью пропускает код отладки, когда вы компилируете его на рабочий сайт.

& если определено (debugalert) <> 0 & затем
&endif </p> <p>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.</p> <hr> <p>/* debug.i omit the following on production */</p> <p>&GLOBAL-DEFINE DEBUGALERT</p> <hr> <p>/* test.p */ {debug.i}</p> <p>DEF VAR h_ct AS INT NO-UNDO</p> <p>DO h_ct = 1 TO 10:</p> <p>&IF DEFINED( DEBUGALERT ) <> 0 &THEN</p> <pre> MESSAGE "debug message" h_ct. <debug code goes here>

& ENDIF

END.

0 голосов
/ 07 мая 2009

Решение основано на предположении, что среда разработки имеет уникальную запись propath, которая недоступна в других средах, и код перекомпилируется при перемещении:

&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

Использование

Сохранить файл как «отладочный» (без расширения) в каталог, на который указывает propath, затем:

{debug}

 /* some debugging code here */

{debug/}
...