Progress 4GLを使用してデバッグコードが実稼働に入るのを防ぎますか?
-
03-07-2019 - |
質問
Progress 4GLを使用しているときに、デバッグコードの塊が本番環境に誤ってリークするのをどのように防止しますか?
解決 4
ソリューションは、開発環境には他の環境では使用できない一意のプロパスエントリがあり、移動するとコードが再コンパイルされるという前提に基づいています:
&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
使用法
<!> quot; debug <!> quot;としてファイルを保存します。 (拡張子なし)propathが指すディレクトリに、次に:
{debug}
/* some debugging code here */
{debug/}
他のヒント
通常、特別なイベント-debug-messageを公開するだけです。私の開発環境には、アプリケーション内にメニュー項目があります。このメニュー項目は、どこでもdebug-messageにサブスクライブし、生成されたメッセージを表示するウィンドウを起動します。したがって、デバッグメッセージをコードに挿入し、メッセージを表示する場合はウィンドウを開くことができます。デバッグコードを片付けるのを忘れると、ライブユーザーにはメッセージが表示されませんが、デバッグウィンドウを開いて何が起こっているかを確認できます。
(これのwebspeedバージョンは、出力をOSファイルに書き込むだけです)
テストデータベースと運用データベースの名前が異なる場合、次のコードを使用できます。
IF DBNNAME = "TESTDB" THEN
DO:
<DEBUG CODE>
END.
アサーションに関する他の回答と同様に、デバッグフラグを含む本番サイトでは空になるインクルードをセットアップできます。開発サイトでは、プログラムにデバッグコードが含まれるように値を定義する必要があります。
プリプロセッサでコードをラップすることにより、コンパイラは、実稼働サイトにコンパイルするときにデバッグコードを完全に省略します。
<!> amp; if defined(debugalert)<!> lt; <!> gt; 0 <!> amp; 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>
<!> amp; ENDIF
END。