在使用Progress 4GL時,您會如何防止大量調試代碼意外泄漏到生產環境中?使用Progress 4GL防止調試代碼投入生產?
回答
一個解決方案是基於發展環境具有獨特的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/}
與我關於斷言的其他答案類似,您可以設置一個包含調試標誌的生產站點上將爲空的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。
如果你的測試數據庫和生產數據庫有不同的名稱,你可以使用此代碼:
IF DBNNAME = "TESTDB" THEN
DO:
<DEBUG CODE>
END.
我通常只發佈一個特別的活動 - 調試消息。在我的開發環境中,應用程序中有一個菜單項,它將啓動一個窗口,該窗口可隨時隨地調試消息並顯示生成的任何消息。所以我可以將調試消息插入我的代碼,然後打開窗口,如果我想看到消息。如果我忘記整理調試代碼,那麼活的用戶看不到任何消息,儘管我仍然可以打開調試窗口來查看發生了什麼。
(這樣做的WEBSPEED版本將只寫輸出到OS文件)
戈登,聽起來像一個非常整齊的想法登錄需求,謝謝! – 2009-06-12 12:22:40
- 1. Progress 4GL代碼分析工具
- 2. Progress 4GL和.Net
- 3. 如何通過ASCII控制代碼與Progress 4GL分割輸入?
- 4. Dynamic Field Validation Progress-4GL
- 5. 防止使用.NET代碼產生進程
- 6. 單元測試,以防止生產
- 7. 防止拖拉和投入
- 8. 如何防止XCode調試器停止對象代碼?
- 9. 低效代碼:防止產生重複的隨機數
- 10. AppLinks在投入生產後停止啓動應用
- 11. Rails資產投入使用
- 12. 防止VS代碼從輸入
- 13. Javascript/jquery防止注入執行代碼
- 14. 防止圖片上傳代碼注入
- 15. 在調查中防止多次投票
- 16. 防止nodejs在開發/調試時縮小javascript代碼
- 17. 如何使用progress-4gl顯示三角形時的數字-gl
- 18. 使用動態密鑰創建JSON(Progress 4GL)
- 19. 我可以防止在關鍵代碼中產生Linux用戶空間pthread嗎?
- 20. .NET生產調試
- 21. Progress 4GL:不能READ-JSON被寫入的JSON
- 22. 單位測試代碼的產生
- 23. 如何防止在我的android jni調用中停止代碼?
- 24. 在生產代碼中使用Spring Assert.notnull
- 25. C++:在生產代碼中使用typeid
- 26. 防止產生新的生產線在XSLT轉換
- 27. 如何避免使用GoogleTest混合測試和生產代碼?
- 28. 防止HTML代碼被盜
- 29. 迭代使用ngRepeat以產生輸入
- 30. 使用代理注入CDI生產者
DuStorm,謝謝,很好的解決方案但它需要一個額外的包含文件。 – 2009-05-07 14:00:17