使用Progress 4GL时,如何防止调试代码块意外泄漏到生产环境中?
答案 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/}