Progress 4GLを使用してデバッグコードが実稼働に入るのを防ぎますか?

StackOverflow https://stackoverflow.com/questions/811213

質問

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。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top