1

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

4

4 回答 4

5

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

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

于 2009-06-12T11:38:40.710 回答
2

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

IF DBNNAME = "TESTDB" THEN
DO:
  <DEBUG CODE>
END.
于 2009-05-05T14:11:23.853 回答
1

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

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

&if 定义(调试)<> 0 &then
&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>

&万一

结尾。

于 2009-05-04T02:38:34.683 回答
0

解决方案基于以下假设:开发环境具有唯一的 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/}
于 2009-05-07T13:58:44.163 回答