2009-05-01 6 views

答えて

0

ソリューションは、開発的環境は、他のenviromentsでは利用できないユニークなpropathエントリを持っていることを前提としています上に移動するとき、コードが再コンパイルされます。

&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

アサーションに関する私の他の回答と同様に、デバッグフラグを含む本番サイトでは空のインクルードを設定できます。開発サイトでは、デバッグコードがプログラムに含まれるように値を定義するだけで済みます。

プリプロセッサにコードをラップすることによって、コンパイラは本番サイトにコンパイルするときにデバッグコードを完全に省略します。

&(debugalert)<> 0 &あなたは、あなたはデバッグコードを入れたいコードのバージョンでは「&グローバル定義のデバッグ」を使用することになり、その後
& endifの

定義されている場合。 "debug"を定義しないと、コンパイラはコードを省略しなければなりません。


/* debug.i生産に以下を省略*/

&グローバル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、おかげで、優れたソリューションは、しかし、それはファイルを含める余分が必要です。 –

2

テストデータベースと本番データベースが別の名前を持っている場合、あなたはこのコードを使用することができます。

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

を、私は通常は特別なイベントパブリッシュ - デバッグメッセージを。私の開発環境では、デバッグメッセージをどこにでも表示して生成されたメッセージを表示するウィンドウを起動するメニュー項目がアプリケーションにあります。だから私は私のコードにデバッグメッセージを挿入し、メッセージを見たい場合はウィンドウを開くことができます。デバッグコードを整理するのを忘れてしまった場合、実際のユーザーにはメッセージは表示されませんが、デバッグウィンドウを開いて何が起こっているのかを確認できます。

(本のwebspeedバージョンはちょうどOSのファイルに出力を書き込みます)

+0

ゴードンは、要求に応じてログオンするための非常にきれいなアイデアのように聞こえる、感謝! –

+0

私はこれが好きです。なぜなら、複数のリスナーを持つことができるからです。そのうちの1つはログ機能です – nwahmaet

関連する問題