使用Progress 4GL防止调试代码投入生产?

时间:2009-05-01 12:48:53

标签: debugging progress-4gl webspeed

使用Progress 4GL时,如何防止调试代码块意外泄漏到生产环境中?

4 个答案:

答案 0 :(得分:5)

我通常只发布一个特殊事件 - debug-message。在我的开发环境中,应用程序中有一个菜单项,它将启动一个窗口,该窗口可以在任何地方显示调试消息并显示生成的任何消息。所以我可以在我的代码中插入调试消息,然后打开窗口,如果我想查看消息。如果我忘记整理调试代码,那么实时用户看不到任何消息,尽管我仍然可以打开调试窗口看看发生了什么。

(这个的webspeed版本只会将输出写入OS文件)

答案 1 :(得分:2)

如果您的测试数据库和生产数据库具有不同的名称,则可以使用以下代码:

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

答案 2 :(得分:1)

与我关于断言的其他答案类似,您可以设置一个包含在包含调试标志的生产站点上为空的包含。在开发站点上,您只需定义值,以便调试代码包含在您的程序中。

通过将代码包装在预处理器中,编译器在将其编译到生产站点时将完全省略调试代码。

&amp; if defined(debugalert)&lt;&gt; 0&amp;然后
&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>

&安培; ENDIF

END。

答案 3 :(得分:0)

解决方案基于以下假设:开发环境具有其他环境中不可用的唯一预测条目,并且在移动时重新编译代码:

&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

<强>用法

将文件保存为“debug”(不带扩展名)到propath指向的目录,然后:

{debug}

 /* some debugging code here */

{debug/}
相关问题