2009-05-01 55 views

回答

0

一個解決方案是基於發展環境具有獨特的PROPATH項,是不是在其他enviroments可用的假設當移到代碼重新編譯:

&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/} 
1

與我關於斷言的其他答案類似,您可以設置一個包含調試標誌的生產站點上將爲空的include。在開發網站上,您只需定義值,以便您的調試代碼包含在程序中。

通過將代碼包裝在預處理器中,編譯器將其編譯到生產站點時將完全省略調試代碼。

&如果定義(debugalert)<> 0 &然後
& ENDIF

你會再使用「&全球定義調試」中要包含調試代碼的代碼的版本。不定義「調試」應該會導致編譯器忽略代碼。


/* debug.i省略對生產的以下*/

& GLOBAL-DEFINE DEBUGALERT


/* test.p */{ } debug.i

DEF VAR h_ct AS INT NO-UNDO

DO h_ct = 1 TO 10:

&如果定義(DEBUGALERT)<> 0 THEN &

 MESSAGE "debug message" h_ct. 
    <debug code goes here> 

& ENDIF

END。

+0

DuStorm,謝謝,很好的解決方案但它需要一個額外的包含文件。 – 2009-05-07 14:00:17

2

如果你的測試數據庫和生產數據庫有不同的名稱,你可以使用此代碼:

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

我通常只發佈一個特別的活動 - 調試消息。在我的開發環境中,應用程序中有一個菜單項,它將啓動一個窗口,該窗口可隨時隨地調試消息並顯示生成的任何消息。所以我可以將調試消息插入我的代碼,然後打開窗口,如果我想看到消息。如果我忘記整理調試代碼,那麼活的用戶看不到任何消息,儘管我仍然可以打開調試窗口來查看發生了什麼。

(這樣做的WEBSPEED版本將只寫輸出到OS文件)

+0

戈登,聽起來像一個非常整齊的想法登錄需求,謝謝! – 2009-06-12 12:22:40