バージョン 4.2.5
 —  デバッガ  —

デバッガのチュートリアル

このチュートリアルでは、デバッガの基本機能を紹介し、さまざまなデバッグ方式を説明します。 ここでは、簡単なシナリオを使用して、ランタイムエラーの分析やプログラム実行の制御を行うためのデバッガの使用方法を示します。

セッション 1~5 は、順番どおりに実行することが重要です。

注意:

  1. 理解しやすいように、チュートリアルでは主に、デバッガ機能を実行するダイレクトコマンドを紹介します。代わりに使用できるメニュー機能は紹介しません。
  2. このチュートリアルに含まれるすべてのデバッガ機能の詳細な説明については、『デバッガ』ドキュメントの残りの部分の該当セクションを参照してください。

前提条件

Top of page

デバッグの基本

デバッガを使用して、Natural オブジェクトの実行フローを特定のデバッグイベントで中断し、中断したオブジェクトの現在のステータスの情報を取得できます。例えば、次に実行されるステートメント、変数の値、および呼び出されるオブジェクトの階層構造(プログラムレベル)などを取得できます。

プログラムを中断するには、基本的に次の 2 つの主な手順を実行して、デバッガに制御を渡す必要があります。

  1. システムコマンド TEST ON でデバッガを有効にします。

    これによりデバッガは、Natural ランタイムシステムによって実行される各ステートメントの制御を受け取ることができます。

  2. 実行される Natural オブジェクトに、1 つ以上のデバッグエントリ(ブレイクポイントとウォッチポイント)を設定します。

    これによりデバッガは、Natural ランタイムシステムから制御を受け取り、プログラムの実行を中断するタイミングを判断できます。

    Natural エラーが発生した場合は、プログラムの実行が必ず中断されます。 この場合は、デバッグエントリが不要となり、自動的に制御がデバッガに移動します。

考えられるすべてのプログラム中断の概要は、次のとおりです。

プログラム中断 説明
ブレイクポイント Natural オブジェクトのステートメント行でプログラムの中断を引き起こします。

デバッガは、ブレイクポイントが設定されたステートメント行が実行されるたびに、プログラム実行を中断します。つまり、この行に含まれるステートメントが処理される前に中断します。

ウォッチポイント Natural オブジェクトの変数でプログラムの中断を引き起こします。

デバッガは、ウォッチポイントが設定された変数の内容が変化するたびに、プログラム実行を中断します。つまり、この変数を参照するステートメントが処理された後に中断します。

ステップモード プログラム実行中にオブジェクトをステップ実行します。

ステップモードはデバッガコマンドにより開始されます。デバッガはその前に、ブレイクポイントまたはウォッチポイントにより制御を受け取っている必要があります。 ステップモードでは、このオブジェクトに含まれる各実行ステートメントが処理される前に、デバッガがプログラム実行を中断します。

Natural エラー 自動的にプログラムの中断を引き起こします。

Top of page

セッション 1 - Natural エラーの分析

このセッションでは、プログラムの実行中に発生する Natural エラーの調査方法を説明します。

Start of instruction setNatural エラーをシミュレートするには

  1. NEXT プロンプトから DEBUG1P を実行します。

    次の Natural エラーメッセージが表示されます。「DEBUG1N 0180 NAT0954 プログラムの実行中に異常終了 S0C7 が発生しました。

    このメッセージは、サブプログラム DEBUG1N の行 180(BONUS := SALARY * PERCENT / 100)を指しています。 これは、参照された 1 つ以上の変数に対して、誤った値が返されたことを示します。 ただし、この時点では、これが問題の本当の原因を示しているのではありません。また、変数値がデータベースから取得されている場合(典型的な例は従業員レコードです)は、原因の特定が困難である可能性があります。

Start of instruction setデバッガを有効にして、さらに問題を調査するには

  1. NEXT プロンプトで次のように入力します。

    TEST ON

    メッセージ「Test mode started. 」は、デバッガが有効であることを示します。

    注意:
    TEST ON は、現在のセッション中、または「TEST OFF」を入力してデバッガを無効にするまでは、有効なままです。

  2. 再び、NEXT プロンプトから DEBUG1P を実行します。

    次の例のような[Debug Break]ウィンドウが表示されます。

    +------------------- Debug Break -------------------+ 
    | Break by ABEND S0C7 at NATARI2+2A4-4 (NAT0954)    | 
    | at line  180 in subprogram DEBUG1N (level 2)      | 
    | in library DEBUG    in system file (10,32).       | 
    |                                                   | 
    |         G   Go                                    | 
    |         L   List break                            | 
    |         M   Debug Main Menu                       | 
    |         N   Next break command                    | 
    |         R   Run (set test mode OFF)               | 
    |         S   Step mode                             | 
    |         V   Variable maintenance                  | 
    |                                                   | 
    | Code .. G                                         | 
    |                                                   | 
    | Abnormal termination S0C7 during program execution| 
    | PF2=Step,PF13=Next,PF14=Go,PF15=Menu,PF17=SkipS   | 
    +---------------------------------------------------+

    Natural エラーが発生するため、自動的に制御がデバッガに移動し、[Debug Break]ウィンドウが表示されます。

    エラーの発生場所に関する詳細情報が、ウィンドウの最上部に表示されます。詳細情報とは、Natural ニュークリアスのモジュール(NATARI2)(Software AG 技術サポートに連絡する際に役立ちます)、オブジェクトのタイプ(subprogram)、ライブラリ(DEBUG)とデータベース ID、およびシステムファイルのファイル番号(10,32)です。

    [Debug Break]ウィンドウには、使用可能なデバッガの機能も表示されます。例えば、プログラム実行の継続([Go]または[Run])、デバッガの管理メニューの呼び出し(デバッグメインメニュー)、またはステップモードの有効化などの機能を使用できます。 機能を実行するには、該当するファンクションコードまたは PF キーを使用します。

Start of instruction set誤ったステートメント行を調べるには

  1. [Code]フィールドで、デフォルトエントリ「G」の代わりに「L」を入力し、[List break]機能を実行します。

    DEBUG1N のソースが表示されます。

    13:48:54              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON                - List Object Source -              Object DEBUG1N 
                                                                     Bottom of data
    Co Line Source                                                    Message      
    __ 0070   2 NUMCHILD  (N2)                                      |              
    __ 0080   2 ENTRYDATE (D)                                       |              
    __ 0090   2 SALARY    (P7.2)                                    |              
    __ 0100   2 BONUS     (P7.2)                                    |              
    __ 0110 LOCAL                                                   |              
    __ 0120 1 TARGETDATE  (D)    INIT <D'2009-01-01'>               |              
    __ 0130 1 DIFFERENCE  (P3.2)                                    |              
    __ 0140 1 PERCENT     (P2.2) INIT <3.5>                         |              
    __ 0150 END-DEFINE                                              |              
    __ 0160 DIFFERENCE := (TARGETDATE - ENTRYDATE) / 365            |              
    __ 0170 IF DIFFERENCE GE 10        /* BONUS FOR YEARS IN COMPAN | last line    
    __ 0180   BONUS := SALARY * PERCENT / 100                       | * NAT0954 *  
    __ 0190 END-IF                                                  |              
    __ 0200 SALARY := SALARY + 1800    /* SALARY PLUS ANNUAL INCREA |              
    __ 0210 END                                                     |              
                                                                                   
    Command ===>                                                                   
                                                                                   
                                                                                   
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Scan  Flip  -     +     Li Br <     >     Canc

    last line は、行 170 に含まれるステートメントが、正常に実行された最後の行であることを示しています。

    問題を引き起こした行 180 のステートメントが強調表示され、* NAT0954 * という注記が付いています。

    これは、エラーの原因が変数 SALARY または PERCENT の内容であることを示します。 PERCENT は正常に初期化されているため、原因はおそらく、SALARY です。

Start of instruction setSALARY の内容をチェックするには

  1. コマンド行で、次のように入力します。

    DIS VAR SALARY

    次の例のような[Display Variable]画面が、変数 SALARY について表示されます。

    18:59:51              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON          - Display Variable (Alphanumeric) -       Object DEBUG1N 
                                                                                   
                                                                                   
    Name ...... EMPLOYEE.SALARY                                                    
    Fmt/Len ... P 7.2                                                              
    Type ...... parameter                                                          
    Index .....                                                                    
    Range .....                                                                    
                                                                                   
    Position ..                                                                    
    Contents ..                                                                    
                                                                      
                                                                                   
    Command ===>                                                                   
                                                 
                                                                                   
    Variable contains invalid data.                                                
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Mod   Flip              Li Br Alpha Hex   Canc

    メッセージ「Variable contains invalid data. 」は、変数の内容が空白で、変数のフォーマットに該当しないことを示します。 これは、次の手順で説明するように、変数の内容を 16 進表現で表示すると、明らかになります。

  2. PF11 キー(Hex)を押して、変数の内容を 16 進数で表示します。

    次の例のような画面が表示されます。

    11:13:33              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON          - Display Variable (Hexadecimal) -        Object DEBUG1N 
                                                                                   
                                                                                   
    Name ...... EMPLOYEE.SALARY                                                    
    Fmt/Len ... P 7.2                                                              
    Type ...... parameter                                                          
    Index .....                                                                    
    Range .....                                                                    
                                                                                   
    Position ..                                                                    
    Contents .. 4040404040                                                         
                                                                                   
                                                                                   
    Command ===>                                                                   
                                                                                   
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Mod   Flip              Li Br Alpha Hex   Canc

    16 進値は、変数がパック型数値フォーマットではなく、そのために、プログラム実行中に計算エラーが発生することを示しています。 DEBUG1P が DEBUG1N に誤った SALARY の値を提供していることは明らかです。

    ヒント:
    表示を英数字表現に戻すには、PF10 キー(Alpha)を押します。

  3. コマンド行で、次のように入力します。

    GO

    コマンド GO を使用すると、制御がデバッガから Natural ランタイムシステムに戻り、プログラムの終了または次のデバッグイベントまでプログラム実行が継続されます。 この場合は、他にデバッグイベントは発生せず、すでに知られている Natural エラーメッセージを示す NEXT プロンプトが表示されます。

Start of instruction setオブジェクトソースで SALARY を修正するには

  1. プログラムエディタで DEBUG1P を開き、SALARY := 99000 に入力されているコメント記号(*)を削除します。

  2. システムコマンド STOW で、プログラムを保存し、カタログします。

  3. DEBUG1P を実行します。

    TEST ON が設定されたままですが、デバッガはプログラムを中断しません。 プログラムが正常に実行され、次のレポートを出力します。

    Page      1                                                  07-09-06  15:28:06
                                                                                   
    EMPLOYEE RECEIVES:   100800.00                                                 
        PLUS BONUS OF:     3465.00                                                 
                                                                                   
                                                                                   
    
                                                                                   
    NEXT                                                               LIB=DEBUG

Top of page

セッション 2 - ブレイクポイントの使用

特定のステートメント行にブレイクポイントを設定して、このステートメント行でプログラム実行を中断することができます。

Start of instruction setDEBUG1N のステートメント行にブレイクポイントを設定するには

  1. NEXT プロンプトで次のように入力します。

    TEST SET BP DEBUG1N 170

    メッセージ「Breakpoint DEBUG1N0170 set at line 170 of object DEBUG1N. 」は、DEBUG1N0170 という名前のブレイクポイントが、DEBUG1N サブプログラムのステートメント行 170 に設定されていることを示しています。

    注意:

    1. ブレイクポイントは実行ステートメントにのみ設定できます。 非実行ステートメントに設定しようとすると、所定のエラーメッセージが表示されます。
    2. ブレイクポイントは通常、現在の Natural セッション中にのみ有効です。 必要な場合は、以降のセッションのためにブレイクポイントを保存できます。「デバッガの使用に関するその他のヒント」の「ブレイクポイントおよびウォッチポイントの保存」を参照してください。
  2. DEBUG1P を実行します。

    これで、新しいブレイクポイントが設定されたステートメント行で、デバッガがプログラム実行を中断します。 [Debug Break]ウィンドウが表示されます。

     +------------------- Debug Break -------------------+
     | Break by breakpoint DEBUG1N0170                   |
     | at line  170 in subprogram DEBUG1N (level 2)      |
     | in library DEBUG    in system file (10,32).       |
     |                                                   |
     |         G   Go                                    |
     |         L   List break                            |
     |         M   Debug Main Menu                       |
     |         N   Next break command                    |
     |         R   Run (set test mode OFF)               |
     |         S   Step mode                             |
     |         V   Variable maintenance                  |
     |                                                   |
     | Code .. G                                         |
     |                                                   |
     |                                                   |
     | PF2=Step,PF13=Next,PF14=Go,PF15=Menu,PF17=SkipS   |
     +---------------------------------------------------+

    このウィンドウには、ブレイクポイントの名前、対応するステートメント行とオブジェクト、およびこのオブジェクトを含むライブラリが表示されます。 また、サブプログラム DEBUG1N の動作レベルも表示されます。

Start of instruction set[Debug Break]ウィンドウが示すステートメントを表示するには

Start of instruction setDEBUG1N に含まれる変数のリストを表示するには

  1. コマンド行で、次のように入力します。

    DIS VAR

    次のような[Display Variables]画面が表示されます。

    11:06:13              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON         - Display Variables (Alphanumeric) -       Object DEBUG1N 
                                                                                All
    Co Le Variable Name                    F       Leng Contents               Msg.
        1 EMPLOYEE                                                                 
    __  2 NAME                             A         20 MEIER                      
    __  2 ENTRYDATE                        D            1989-01-01                 
    __  2 SALARY                           P        7.2 99000.00                   
    __  2 BONUS                            P        7.2 *** invalid data ***       
    __  1 TARGETDATE                       D            2009-01-01                 
    __  1 DIFFERENCE                       P        3.2 20.00                      
    __  1 PERCENT                          P        2.2 3.50                       
                                                                                   
                                                                             
                                                                                   
    Command ===>                                                                   
                                                                       
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Zoom  Flip  -     +     Li Br Alpha Hex   Canc

    この画面には、DEBUG1N で定義されたすべての変数のリストが表示されます。 BONUSinvalid data(無効データ)の注釈は無視できます。 この場合は、BONUS がターゲットオペランドとしてのみ使用されているため、正しく初期化されている必要はありません。 ただし、別のデバッガコマンドを実行するには、次の手順で BONUS の内容を変更してください。

Start of instruction setBONUS の内容をチェックして変更するには

  1. BONUS の隣の[Co]列に、次のように入力します。

    MO

    または:
    コマンド行で、次のように入力します。

    MOD VAR BONUS

    次のような[Modify Variable]画面が表示されます。

    11:29:50              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON          - Modify Variable (Alphanumeric) -        Object DEBUG1N 
                                                                                   
                                                                                   
    Name ...... EMPLOYEE.BONUS                                                     
    Fmt/Len ... P 7.2                                                              
    Type ...... parameter                                                          
    Index .....                                                                    
    Range .....                                                                    
                                                                                   
    Position .. 1                                                                  
    Contents .. ___________                                                        
     
                                                                      
                                                                                 
    Command ===>                                                                   
                                                                                   
                                                                                   
    Variable contains invalid data.                                                
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Save  Flip              Li Br Alpha Hex   Canc
  2. 16 進表示を使用すると、変数がパック型数値のフォーマットでないことを確認できます。 表示を英数字表現に戻すには、PF10 キー(Alpha)を押します。

  3. [Contents]フィールドに、12345.00 などのパック型数値フォーマットの値を入力し、PF5 キー(Save)を押します。

    次の例のような画面が表示されます。

    11:50:00              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON          - Display Variable (Alphanumeric) -       Object DEBUG1N 
                                                                                   
                                                                                   
    Name ...... EMPLOYEE.BONUS                                                     
    Fmt/Len ... P 7.2                                                              
    Type ...... parameter                                                          
    Index .....                                                                    
    Range .....                                                                    
                                                                                   
    Position ..                                                                    
    Contents .. 12345.00                                                           
                                                                                  
                                                                                   
                                                                                   
    Command ===>                                                                   
                                                                                   
                                                                                   
    Variable BONUS modified.                                                       
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Mod   Flip              Li Br Alpha Hex   Canc

    [Contents]の変更を確認するメッセージが表示されます。

  4. PF9 キー(Li Br)または PF3 キー(Exit)を押します。

    [List Object Source]画面が表示されます。

  5. コマンド行で、次のように入力します。

    GO

    デバッガが Natural ランタイムシステムに制御を戻し、これ以上、デバッグイベントは発生しないため、DEBUG1P の実行が終了します。 プログラムが生成したレポートが出力されます。

    Page      1                                                  07-09-06  10:02:51
                                                                                   
    EMPLOYEE RECEIVES:   100800.00                                                 
        PLUS BONUS OF:     3465.00                                                 
                                                                                   
                                                                                   
                                                                                   
                                                                                   
    NEXT                                                               LIB=DEBUG
  6. 次のセッションへ進む前に、NEXT プロンプトで次のように入力して、現在のすべてのブレイクポイントを削除します。

    TEST DEL BP * *

    すべてのブレイクポイント(この場合は 1 つのブレイクポイントのみ)が削除されることを確認するメッセージが表示されます。

Top of page

セッション 3 - ウォッチポイントの使用

DEBUG1P および DEBUG1N は、1 名の従業員に支払われるボーナスと給与の計算を実行します。 複数の従業員レコードが処理される場合は、変数 BONUS が正しく更新されたかどうかをテストすることをお勧めします。 そのためには、この変数にウォッチポイントを設定します。 ウォッチポイントを使用すると、指定した変数の内容が変更されたときに、デバッガがプログラム実行を中断できます。

Start of instruction set変数 BONUS にウォッチポイントを設定するには

  1. NEXT プロンプトで次のように入力します。

    TEST SET WP DEBUG1N BONUS

    メッセージ「Watchpoint BONUS set for variable EMPLOYEE.BONUS. 」は、DEBUG1N サンプルサブプログラムの変数 BONUS にウォッチポイントが設定されたことを示しています。

    注意:

    1. デバッガ画面のコマンド行にデバッガのダイレクトコマンドを入力する場合は、キーワード TEST を省略する必要があります。 例えば、「TEST SET WP DEBUG1N BONUS」ではなく、「SET WP DEBUG1N BONUS」のみを入力します。
    2. ウォッチポイントは通常、現在の Natural セッション中にのみ有効です。 必要な場合は、以降のセッションのためにウォッチポイントを保存できます。「デバッガの使用に関するその他のヒント」の「ブレイクポイントおよびウォッチポイントの保存」を参照してください。
  2. NEXT プロンプトから DEBUG1P を実行します。

    デバッガは、新しいウォッチポイントでプログラム実行を中断し、[Debug Break]ウィンドウを呼び出します。

    +------------------- Debug Break -------------------+
    | Break by watchpoint BONUS                         |
    | at line  180 in subprogram DEBUG1N (level 2)      |
    | in library DEBUG    in system file (10,32).       |
    |                                                   |
    |         G   Go                                    |
    |         L   List break                            |
    |         M   Debug Main Menu                       |
    |         N   Next break command                    |
    |         R   Run (set test mode OFF)               |
    |         S   Step mode                             |
    |         V   Variable maintenance                  |
    |                                                   |
    | Code .. G                                         |
    |                                                   |
    |                                                   |
    | PF2=Step,PF13=Next,PF14=Go,PF15=Menu,PF17=SkipS   |
    +---------------------------------------------------+

    このウィンドウは、行 180 でウォッチポイントが検出されたことを示します。 この行には、変数 BONUS を処理するステートメントが含まれています。

    デバッガは、BONUS のステートメントが処理された後にプログラム実行を中断しています。 デバッガが、変数の内容が変更されたことを認識できたのは、処理された後のみであるためです。

  3. [List break]機能を実行します。

    [List Object Source]画面は、次の例のように表示されます。

    16:24:46              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON                - List Object Source -              Object DEBUG1N 
                                                                     Bottom of data
    Co Line Source                                                    Message      
    __ 0070   2 NUMCHILD  (N2)                                      |              
    __ 0080   2 ENTRYDATE (D)                                       |              
    __ 0090   2 SALARY    (P7.2)                                    |              
    __ 0100   2 BONUS     (P7.2)                                    |              
    __ 0110 LOCAL                                                   |              
    __ 0120 1 TARGETDATE  (D)    INIT <D'2009-01-01'>               |              
    __ 0130 1 DIFFERENCE  (P3.2)                                    |              
    __ 0140 1 PERCENT     (P2.2) INIT <3.5>                         |              
    __ 0150 END-DEFINE                                              |              
    __ 0160 DIFFERENCE := (TARGETDATE - ENTRYDATE) / 365            |              
    __ 0170 IF DIFFERENCE GE 10        /* BONUS FOR YEARS IN COMPAN | DEBUG1N0170  
    __ 0180   BONUS := SALARY * PERCENT / 100                       | BONUS        
    __ 0190 END-IF                                                  |              
    __ 0200 SALARY := SALARY + 1800    /* SALARY PLUS ANNUAL INCREA |              
    __ 0210 END                                                     |              
                                                                                   
    Command ===>                                 
                                                                                   
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Scan  Flip  -     +     Li Br <     >     Canc

    変数 BONUS を参照するステートメントが強調表示され、[Message]列には、この変数に設定されたウォッチポイントの名前が表示されます。

Start of instruction setBONUS の変更をチェックするには

  1. コマンド行で、次のように入力します。

    DIS VAR BONUS

    [Display Variable]画面が表示され、[Contents]フィールドに 3465.00 という値が示されます。 これは、変数 BONUS の内容が変更されたことを表します。

  2. PF3 キー(Exit)を押して、[List Object Source]画面に戻ります。

Start of instruction setSALARY の変更をチェックするには

  1. この後の手順で変数 SALARY の内容をテストするには、行 200 の[Co]列に次のように入力して、SALARY にブレイクポイントを設定します。

    SE

    [List Object Source]画面では、SET BP ダイレクトコマンドの代わりに、SE などの便利な行コマンドも使用できます。

    [Message]列は、ブレイクポイント(BP)が行 200 に設定されていることを示しています。

    17:55:58              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON                - List Object Source -              Object DEBUG1N 
                                                                     Bottom of data
    Co Line Source                                                    Message      
    __ 0070   2 NUMCHILD  (N2)                                      |              
    __ 0080   2 ENTRYDATE (D)                                       |              
    __ 0090   2 SALARY    (P7.2)                                    |              
    __ 0100   2 BONUS     (P7.2)                                    |              
    __ 0110 LOCAL                                                   |              
    __ 0120 1 TARGETDATE  (D)    INIT <D'2009-01-01'>               |              
    __ 0130 1 DIFFERENCE  (P3.2)                                    |              
    __ 0140 1 PERCENT     (P2.2) INIT <3.5>                         |              
    __ 0150 END-DEFINE                                              |              
    __ 0160 DIFFERENCE := (TARGETDATE - ENTRYDATE) / 365            |              
    __ 0170 IF DIFFERENCE GE 10        /* BONUS FOR YEARS IN COMPAN | DEBUG1N0170  
    __ 0180   BONUS := SALARY * PERCENT / 100                       | BONUS        
    __ 0190 END-IF                                                  |              
    __ 0200 SALARY := SALARY + 1800    /* SALARY PLUS ANNUAL INCREA | BP set       
    __ 0210 END                                                     |              
                                                                                   
    Command ===>                                                                   
                                                                                  
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Scan  Flip  -     +     Li Br <     >     Canc
  2. コマンド行で、次のように入力します。

    GO

    [Debug Break]ウィンドウが表示されます。

    +------------------- Debug Break -------------------+
    | Break by breakpoint DEBUG1N0200                   |
    | at line  200 in subprogram DEBUG1N (level 2)      |
    | in library DEBUG    in system file (10,32).       |
    |                                                   |
    |         G   Go                                    |
    |         L   List break                            |
    |         M   Debug Main Menu                       |
    |         N   Next break command                    |
    |         R   Run (set test mode OFF)               |
    |         S   Step mode                             |
    |         V   Variable maintenance                  |
    |                                                   |
    | Code .. G                                         |
    |                                                   |
    |                                                   |
    | PF2=Step,PF13=Next,PF14=Go,PF15=Menu,PF17=SkipS   |
    +---------------------------------------------------+
  3. [List break]機能を実行します。

    [List Object Source]画面は、次の例のように表示されます。

    10:49:31              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON                - List Object Source -              Object DEBUG1N 
                                                                     Bottom of data
    Co Line Source                                                    Message      
    __ 0070   2 NUMCHILD  (N2)                                      |              
    __ 0080   2 ENTRYDATE (D)                                       |              
    __ 0090   2 SALARY    (P7.2)                                    |              
    __ 0100   2 BONUS     (P7.2)                                    |              
    __ 0110 LOCAL                                                   |              
    __ 0120 1 TARGETDATE  (D)    INIT <D'2009-01-01'>               |              
    __ 0130 1 DIFFERENCE  (P3.2)                                    |              
    __ 0140 1 PERCENT     (P2.2) INIT <3.5>                         |              
    __ 0150 END-DEFINE                                              |              
    __ 0160 DIFFERENCE := (TARGETDATE - ENTRYDATE) / 365            |              
    __ 0170 IF DIFFERENCE GE 10        /* BONUS FOR YEARS IN COMPAN | DEBUG1N0170  
    __ 0180   BONUS := SALARY * PERCENT / 100                       | last line    
    __ 0190 END-IF                                                  |              
    __ 0200 SALARY := SALARY + 1800    /* SALARY PLUS ANNUAL INCREA | DEBUG1N0200  
    __ 0210 END                                                     |              
                                                                                   
    Command ===>                                                                   
                                                                                   
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Scan  Flip  -     +     Li Br <     >     Canc

    これはブレイクポイントであるため、SALARY を参照(および更新)するステートメントは、まだ実行されていません。 したがって、変数の内容は変更されていません。

  4. コマンド行に、DIS VAR SALARY を入力して、SALARY の内容が変更されていないことを確認します。

    変数画面を見ると、SALARY の値が、DEBUG1P で割り当てられた初期値である 99000 のままであることがわかります。

  5. 更新された変数の内容を表示するには、次のいずれかの方法を選んで、次のステートメントに進みます。

    コマンド行で、次のように入力します。

    STEP

    または:
    PF2 キー(Step)を押します。

    次の例のような画面が表示されます。

    13:38:24              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON                - List Object Source -              Object DEBUG1N 
                                                                     Bottom of data
    Co Line Source                                                    Message      
    __ 0070   2 NUMCHILD  (N2)                                      |              
    __ 0080   2 ENTRYDATE (D)                                       |              
    __ 0090   2 SALARY    (P7.2)                                    |              
    __ 0100   2 BONUS     (P7.2)                                    |              
    __ 0110 LOCAL                                                   |              
    __ 0120 1 TARGETDATE  (D)    INIT <D'2009-01-01'>               |              
    __ 0130 1 DIFFERENCE  (P3.2)                                    |              
    __ 0140 1 PERCENT     (P2.2) INIT <3.5>                         |              
    __ 0150 END-DEFINE                                              |              
    __ 0160 DIFFERENCE := (TARGETDATE - ENTRYDATE) / 365            |              
    __ 0170 IF DIFFERENCE GE 10        /* BONUS FOR YEARS IN COMPAN | DEBUG1N0170  
    __ 0180   BONUS := SALARY * PERCENT / 100                       |              
    __ 0190 END-IF                                                  |              
    __ 0200 SALARY := SALARY + 1800    /* SALARY PLUS ANNUAL INCREA | last line    
    __ 0210 END                                                     | step mode    
                                                                                   
    Command ===>                                                                   
                                                                               
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Scan  Flip  -     +     Li Br <     >     Canc

    1 行スキップして、行 200 にある次の実行ステートメントを処理し、SALARY を更新しました。 [Message]列は、ステップモードが設定されていることを示しています。 ステップモードでは、次の実行ステートメントまで、デバッガがプログラム実行を継続します。

  6. コマンド行に DIS VAR SALARY を入力して、変数の内容をチェックします。

    [Display Variable]画面が表示され、[Contents]フィールドに 100800.00 という値が示されます。 これは、変数 SALARY の内容が変更されたことを示しています。

  7. コマンド行で、次のように入力します。

    GO

    デバッガが Natural ランタイムシステムに制御を戻し、これ以上、デバッグイベントは発生しないため、DEBUG1P の実行が終了します。 プログラムが生成したレポートが出力されます。

Top of page

セッション 4 - プログラムの論理的な流れの追跡

このセッションでは、さまざまなデバッグ方法について説明します。これらの方法を使用すると、多数のオブジェクトを含む複雑な Natural アプリケーションへの理解を深め、全体の把握と制御を向上させることができます。

このセッションでは最初に、アプリケーションの論理的な流れをステートメントレベルで分析する手順を説明します。 そして、ブレイクポイントを使用して、プログラムの実行順序を調べる方法を示します。

このセッションでの手順の説明は、簡単な(しかも、十分に実行できる)サンプルアプリケーションに基づいています。このアプリケーションは、1 つのプログラム(DEBUG2P)と 3 つのサブプログラム(DEBUG2N、DEBUG3N、DEBUG4N)で構成されています。

Start of instruction setプログラムの先頭または末尾にブレイクポイントを設定するには

  1. NEXT プロンプトに次のように入力して、DEBUG2P にブレイクポイントを設定します。

    TEST SET BP DEBUG2P BEG

    メッセージ「Breakpoint DEBUG2P-BEG set at line BEG of object DEBUG2P. 」は、DEBUG1N にブレイクポイントが設定されていることを示しています。

    特定の行番号でなく、キーワード BEG を使用すると、プログラムの先頭、つまり、プログラムで実行される最初のステートメントにブレイクポイントが設定されます。 例えば、INIT 節が使用される場合の DEFINE DATA ステートメントにも、ブレイクポイントを設定できます。こうすると、プログラムがカタログされるときに、実行ステートメントが生成されます。

    ヒント:

    また、キーワード END を指定して、実行される最後のステートメントにブレイクポイントを設定することもできます。 最後のステートメントは、END ステートメントだけでなく、FETCH または CALLNAT ステートメントである場合があります。

  2. DEBUG2P を実行します。

    [Debug Break]ウィンドウが表示されます。

    +------------------- Debug Break -------------------+
    | Break by breakpoint DEBUG2P-BEG                   |
    | at line  130 in program DEBUG2P (level 1)         |
    | in library DEBUG    in system file (10,32).       |
    |                                                   |
    |         G   Go                                    |
    |         L   List break                            |
    |         M   Debug Main Menu                       |
    |         N   Next break command                    |
    |         R   Run (set test mode OFF)               |
    |         S   Step mode                             |
    |         V   Variable maintenance                  |
    |                                                   |
    | Code .. G                                         |
    |                                                   |
    |                                                   |
    | PF2=Step,PF13=Next,PF14=Go,PF15=Menu,PF17=SkipS   |
    +---------------------------------------------------+

    これで、プログラムに設定された最初のブレイクポイントで、制御がデバッガに移動します。

  3. [List break]機能を実行して、ソースをチェックし、最初の実行ステートメント NAME := 'MEIER' でデバッガに制御が移動することを確認します。

Start of instruction setアプリケーションをステップ実行するには

  1. [List Object Source]画面で、PF2 キー(Step)を押すか、コマンド行に STEP を入力して、ステップモードを設定します。

    実行される最後の行には、last line という注記が付いています。 実行される次のステートメントは強調表示され、step mode という注記が付いています。

    ヒント:

    デバッガを各ステートメントで停止させずに、アプリケーションをより短時間でステップ実行するには、STEP コマンドで、STEP 2 または STEP 10 のように、スキップするステートメントの数を指定します。

  2. CALLNAT ステートメントに step mode という注記が付けられるまで、PF2 キー(Step)を繰り返し押します。

  3. さらに PF2 キー(Step)を押して、CALLNAT を実行します。

    呼び出されたサブプログラム DEBUG2N が表示されます。ここでは、実行される次のステートメントが強調表示されています。

    11:59:19              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON                - List Object Source -              Object DEBUG2N 
                                                                        Top of data
    Co Line Source                                                    Message      
    __ 0010 ** SUBPROGRAM DEBUG2N: CALLS 'DEBUG3N' AND 'DEBUG4N'FOR |              
    __ 0020 ******************************************************* |              
    __ 0030 DEFINE DATA                                             | step mode    
    __ 0040 PARAMETER                                               |              
    __ 0050 1 EMPLOYEE                                              |              
    __ 0060   2 NAME      (A20)                                     |              
    __ 0070   2 NUMCHILD  (N2)                                      |              
    __ 0080   2 ENTRYDATE (D)                                       |              
    __ 0090   2 SALARY    (P7.2)                                    |              
    __ 0100   2 BONUS     (P7.2)                                    |              
    __ 0110 LOCAL                                                   |              
    __ 0120 1 TARGETDATE  (D)    INIT <D'2009-01-01'>               |              
    __ 0130 1 DIFFERENCE  (P3.2)                                    |              
    __ 0140 1 PERCENT     (P2.2) INIT <3.5>                         |              
    __ 0150 END-DEFINE                                              |              
                                                                                   
    Command ===>                                                                   
                                                                                
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help  Step  Exit  Last  Scan  Flip  -     +     Li Br <     >     Canc

    この方法を使用せずに、コマンド行に STEP SKIP を入力して、CALLNAT をスキップすることもできます。

    この場合は、呼び出すプログラム DEBUG2 のステートメントだけがステップ実行され、呼び出されるサブプログラムの各ステートメントは実行されません。

Start of instruction setオブジェクトの実行レベルを表示するには

  1. DEBUG2N の[List Object Source]画面で、コマンド行に次のように入力します。

    OBJCHAIN

    次のような[Break Information]画面が表示されます。

    13:45:34               ***** NATURAL TEST UTILITIES *****            2007-09-06
                                 - Break Information -
                                                      
    No GDA active for the current program.            
                                                      
    Break by step mode                                
    at line   30 in subprogram DEBUG2N (level 2)
    in library DEBUG    in system file (10,32).

    すでに知られているオブジェクト情報の他に、プログラムが GDA(グローバルデータエリア)を参照するかどうかがこの画面に示されます。

  2. Enter キーを押して、1 ページ下方にスクロールします。

    次の例のような画面が表示されます。

    13:46:34               ***** NATURAL TEST UTILITIES *****            2007-09-06
                               - Current Object Chain -
    
    Level Name     Type        Line Library   DBID   FNR
      2   DEBUG2N  Subprogram     0 DEBUG       10    32
      1   DEBUG2P  Program      170 DEBUG       10    32

    この画面は、オブジェクトが実行される動作レベルを示します。サブプログラム DEBUG2N はレベル 2 で、プログラム DEBUG2P(これがサブプログラムを呼び出します)はその上位のレベル 1 で実行されます。

  3. Enter キーを押します。

    [List Object Source]画面が表示されます。

  4. コマンド行で、次のように入力します。

    GO

    デバッガが Natural ランタイムシステムに制御を戻し、これ以上、デバッグイベントは発生しないため、DEBUG2P の実行が終了します。 プログラムが生成したレポートが出力されます。

    Page      1                                                  07-09-06  10:04:21
                                                                                   
    EMPLOYEE RECEIVES:    99300.00                                                 
        PLUS BONUS OF:     3565.00                                                 
    
                                                             
                                                                                   
                                                                                   
    NEXT                                                               LIB=DEBUG
  5. NEXT プロンプトで次のように入力して、現在設定されているすべてのブレイクポイントを削除します。

    TEST DEL BP * *

    すべてのブレイクポイントが削除されることを確認するメッセージが表示されます。

Start of instruction setプログラム実行に続くブレイクポイントを設定するには

  1. NEXT プロンプトで次のように入力します。

    TEST SET BP ALL BEG

    メッセージ「Breakpoint ALL-BEG set at line BEG of object ALL. 」が表示されます。

    これは、実行される各オブジェクトの最初の実行ステートメントにブレイクポイントを設定したことを示します。

  2. DEBUG2P を実行します。

    DEBUG2P の[Debug Break]ウィンドウが表示されます。

  3. [Go]関数を繰り返し実行します。

    [Go]を実行するたびに、次に呼び出されるオブジェクトが[Debug Break]ウィンドウに表示されます(最初に DEBUG2N、次に DEBUG3N と DEBUG4N)。 したがって、どのオブジェクトが、プログラム実行中のどの時点で呼び出されるかを簡単に判定できます。 また、各オブジェクトに対して、[Debug Break]ウィンドウのメニュー機能を適用できます。

  4. NEXT プロンプトが表示されたら、次のように入力して、現在設定されているすべてのブレイクポイントを削除します。

    TEST DEL BP * *

    すべてのブレイクポイントが削除されることを確認するメッセージが表示されます。

Top of page

セッション 5 - プログラム実行に関する統計の使用

デバッガを使用して、呼び出されるオブジェクトと、それらが呼び出される頻度の統計情報を表示できます。 さらに、実行されるステートメントと、その実行頻度を表示できます。

Start of instruction setプログラム実行中に呼び出されるオブジェクトがどれかをチェックするには

  1. NEXT プロンプトで次のように入力します。

    TEST SET CALL ON

    メッセージ「Call statistics started. 」は、統計機能が有効であることを示しています。

  2. DEBUG2P を実行します。

    デバッガは、実行されるすべてのオブジェクト呼び出しをログに記録します。その後、プログラムで生成されたレポートが出力されます。

  3. NEXT プロンプトで次のように入力します。

    TEST DIS CALL

    次のような[Display Called Objects]画面が表示されます。

    10:43:47              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON              - Display Called Objects -            Object         
                                                                                All
    Object   Library  Type         DBID   FNR S/C Ver Cat Date   Time       Calls  
    *_______ DEBUG___                                                              
    DEBUG2P  DEBUG    Program        10    32 S/C 4.2 2007-08-30 13:48          1  
    DEBUG2N  DEBUG    Subprogram     10    32 S/C 4.2 2007-08-30 13:48          1  
    DEBUG3N  DEBUG    Subprogram     10    32 S/C 4.2 2007-08-30 13:48          1  
    DEBUG4N  DEBUG    Subprogram     10    32 S/C 4.2 2007-08-30 13:48          1  
                                                                               
                                                                                   
                                                                                   
    Command ===>                                                                   
                                                                                   
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help        Exit  Last        Flip        +                       Canc

    画面には、実行されるすべてのオブジェクトのリストが表示されます。ここでは、呼び出しプログラム(DEBUG2P)および、呼び出されたその他のすべてのオブジェクト(DEBUG2N、DEBUG3N、DEBUG4N)が表示されています。 また、各オブジェクトが呼び出される頻度(CALLS)、呼び出されるオブジェクトのタイプ、オブジェクトが格納される場所と Natural バージョン、ソースオブジェクトとカタログ化オブジェクトがあるかどうか、オブジェクトがいつカタログされたかも表示されます。

  4. NEXT プロンプトが表示されるまで、PF3 キー(Exit)または PF12 キー(Canc)を押します。

Start of instruction setプログラム実行中に実行されるステートメントがどれかをチェックするには

  1. NEXT プロンプトで次のように入力します。

    TEST SET XSTAT COUNT

    メッセージ「Statement execution counting started for library/object */*. 」は、現在のライブラリに含まれるすべてのオブジェクト、およびこのライブラリに連結されたすべての steplib に対して統計機能が有効であることを示しています。

  2. DEBUG2P を実行します。

    デバッガは、プログラムが処理するすべてのステートメントをログに記録します。その後、プログラムで生成されたレポートが出力されます。

  3. NEXT プロンプトで次のように入力します。

    TEST DIS XSTAT

    次の例のような[List Statement Execution Statistics]画面が表示されます。

    11:39:10              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON        - List Statement Execution Statistics -     Object         
                                                                                All
    Co Object   Library  Type        DBID   FNR Obj.Called Exec Exec   %  Total No.
       *_______ *_______                           n Times able uted     Executions
    __ DEBUG2P  DEBUG    Program       10    32          1    8    8 100          8
    __ DEBUG2N  DEBUG    Subprogram    10    32          1    8    8 100          8
    __ DEBUG3N  DEBUG    Subprogram    10    32          1    2    2 100          2
    __ DEBUG4N  DEBUG    Subprogram    10    32          1   10    7  70          7
                                                                                   
                                                                                   
                                                                                   
    Command ===>                                                                   
                                                                                   
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help        Exit  Last        Flip  -     +                       Canc

    この画面には、呼び出しの数(Obj. Called n Times)、実行ステートメントの数(Exec able)、実行されたステートメントの数(Executed)、実行ステートメントの総数に対する、実行されたステートメントのパーセンテージ(%)、および実行されたステートメントの総数(Total No. Executions)のリストが含まれます。

  4. DEBUG4N の隣の[Co]列に、次のように入力します。

    DS

    次のような統計画面が表示されます。

    12:11:19              ***** NATURAL TEST UTILITIES *****             2007-09-06
    Test Mode ON             - Display Statement Lines -            Object DEBUG4N 
                                                                                   
    Line Source                                                              Count 
    0010 ** SUBPROGRAM 'DEBUG4N': CALCULATES SPECIAL SALARY INCREASE               
    0020 ************************************************************              
    0030 DEFINE DATA                                                               
    0040 PARAMETER                                                                 
    0050 1 SALARY (P7.2)                                                           
    0060 END-DEFINE                                                                
    0070 DECIDE FOR FIRST CONDITION                                              1 
    0080   WHEN SALARY < 50000                                                   1 
    0090     SALARY := SALARY + 1800                                  not executed 
    0100   WHEN SALARY < 70000                                                   1 
    0110     SALARY := SALARY + 1200                                  not executed 
    0120   WHEN SALARY < 90000                                                   1 
    0130     SALARY := SALARY + 600                                   not executed 
    0140   WHEN NONE                                                             1 
    0150     SALARY := SALARY + 300                                              1 
                                                                                   
    Command ===>                                                                   
                                                                                   
                                                                                   
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help        Exit  Last        Flip        +                       Canc

    この画面は、ステートメントが実行された頻度と、処理されなかった実行ステートメントを示します。

Top of page

デバッガの使用に関するその他のヒント

このセクションでは、デバッガの使用に関するその他のヒントを説明します。

オブジェクトのタイムスタンプ

カタログ化オブジェクトがソースオブジェクトと正確には対応しない場合は、デバッグエラーが発生する可能性があります。 ソースオブジェクトとカタログ化オブジェクトが確実に対応するようにするには、これらをシステムコマンド STOW で保存し、カタログします。

詳細については、「動作要件」セクションを参照してください。

ブレイクポイントおよびウォッチポイントの保存

現在のセッションで設定されているブレイクポイントとウォッチポイントをデバッグ環境として保存できます。今後のセッションでは、この環境をロードして使用できます。 これは、同じデバッグエントリを含むアプリケーションを繰り返しテストする場合に便利です。

詳細については、「デバッグ環境のメンテナンス」を参照してください。

メンテナンス機能のデバッグメインメニュー

ブレイクポイントの設定または統計の作成などのデバッガメンテナンス機能はすべて、ダイレクトコマンドか、またはデバッグメインメニューで提供されるメンテナンス機能を使用して実行できます。 このメニューは、次のいずれかを入力すると開きます。

メンテナンス画面のコマンドのヘルプ

デバッガメンテナンス画面で使用できるダイレクトコマンドのリストを表示するには、PF1 キー(Help)を押すか、コマンド行に疑問符(?)を入力します。

リスト項目を含むデバッガメンテナンス画面には通常、項目をさらに処理するために使用できる行コマンドも表示されます。 行コマンドは、目的の項目の横の[Co]列に入力します。 この列に疑問符(?)を入力すると、有効な行コマンドがリストされます。

プログラム中断中に使用できる主な機能

プログラム中断中に使用できる主な機能のリストは、次のセクションにあります。 これらの機能は[Debug Break]ウィンドウから、またはデバッガメンテナンス画面のコマンド行から実行できます。

[Debug]ウィンドウのコード 代替ダイレクトコマンド 機能
G GO 次のデバッグイベントが発生するまで、プログラム実行を継続します。
L LIST BREAK デバッグイベントが発生したステートメント行に、オブジェクトソースのリストを表示します。
N NEXT ブレイクポイントまたはウォッチポイントに指定されている場合は、次の BREAK コマンドを実行します。 「プログラム中断中の追加コマンドの次のオプション」も参照してください。
R RUN テストモードをオフに切り替え、プログラム実行を継続します。
S STEP 実行ステートメントを 1 行ずつ処理します。
V DIS VAR 中断されたオブジェクトに定義されている変数のリストを表示します。

プログラム中断中の追加コマンドの次のオプション

ブレイクポイントまたはウォッチポイントを表示または変更しているときには、そのそれぞれにデバッガコマンド BREAK が付加されています。 このコマンドは[Debug Break]ウィンドウを呼び出します。また、このコマンドは削除しないでください。 ただし、プログラム中断中に実行される追加デバッガコマンドを、BREAK コマンドの後に指定できます。 追加コマンドは、コマンド行にコマンド NEXT を入力するか、[Debug Break]ウィンドウにファンクションコード「N」を入力すると、実行されます。

デバッガコマンドは、次の例に示すように、適切なブレイクポイントまたはウォッチポイントのメンテナンス画面の[Commands]フィールドに入力します。

11:38:55              ***** NATURAL TEST UTILITIES *****             2007-09-06
Test Mode ON                - Modify Breakpoint -               Object         
                                                                               
Spy number ..............   1                                                  
Initial state ........... A (A = Active, I = Inactive)                         
Breakpoint name ......... DEBUG1P0170_   DBID/FNR ....... 10/32                
Object name ............. DEBUG1P_       Library ........ DEBUG                
Line number ............. 0170                                                 
Label ................... ________________________________                     
Skips before execution .. ____0                                                
Max number executions ... ____0                                                
                                                                               
                                                                               
Commands ... BREAK_______________________________________________________      
             STACK_______________________________________________________      
             DIS VAR BONUS_______________________________________________      
             ____________________________________________________________      
             ____________________________________________________________      
             ____________________________________________________________      
                                                                               
Command ===>                                                                   
                                                                         
                                                                               
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
      Help        Exit  Last  Save  Flip                                Canc

上の例では、コマンド STACK の指示によりデバッガが Natural スタックを表示します。 コマンド DIS VAR BONUS の指示により、デバッガが指定された変数を表示します。 これは、ループにブレイクポイントを設定し、特定の変数の値のみを常に表示させる場合などに便利です。 こうすると、DIS VAR コマンドを繰り返し入力する必要がなくなります。

詳細については、「ブレイクポイント画面のフィールドと列」および「ウォッチポイント画面のフィールドと列」の各セクションにある[Commands]フィールドの説明を参照してください。

ラージ変数および配列の表示

[Display Variable]画面には、変数のすべての定義と、英数字または 16 進形式でのその内容が表示されます。 内容が現在の画面に収まらないラージ変数、または配列定義を持つ変数に使用できる表示機能の詳細については、「[Display Variable]- 詳細」セクションを参照してください。

デバッガ統計の出力

デバッガが生成した統計レポートを出力したり、PC にダウンロードしたりすることができます。

詳細については、「コール統計のメンテナンス」セクションの「オブジェクトの出力」および「ステートメント実行統計のメンテナンス」セクションの「出力ステートメント」を参照してください。

バッチモードでのデバッガの使用

デバッガは主に、オンラインモードでの対話式動作を目的として設計されています。 原則として、すべてのデバッガ機能はバッチモードで実行できますが、バッチでのオンライン動作の処理(PF キーの使用など)には、複雑なバッチプログラミングが必要な場合があります。 ただし、バッチ処理を行うと便利なデバッガ機能もあります。 その 1 つの例は、「バッチ処理」セクションの「バッチでの統計の生成と出力の例」で説明されているように、アプリケーションに関する統計データの収集と出力です。

Top of page

サンプルソース

このセクションには、セッション 1~5 に必要なサンプルのプログラムとサブプログラムのソースコードを掲載しています。

プログラム DEBUG1P

** PROGRAM 'DEBUG1P: CALLS 'DEBUG1N' FOR SALARY AND BONUS CALCULATION 
**********************************************************************
DEFINE DATA                                                           
LOCAL                                                                 
1 EMPLOYEE    (A42)                                                   
1 REDEFINE EMPLOYEE                                                   
  2 NAME      (A20)                                                   
  2 NUMCHILD  (N2)                                                    
  2 ENTRYDATE (D)                                                     
  2 SALARY    (P7.2)                                                  
  2 BONUS     (P7.2)                                                  
END-DEFINE                                                            
NAME      := 'MEIER'                                                  
NUMCHILD  := 2                                                        
ENTRYDATE := D'1989-01-01'                                            
* SALARY  := 99000                                                    
CALLNAT 'DEBUG1N' NAME NUMCHILD ENTRYDATE SALARY BONUS                
WRITE 'EMPLOYEE RECEIVES:'   SALARY                                   
WRITE '    PLUS BONUS OF:'   BONUS                                    
END

サブプログラム DEBUG1N

** SUBPROGRAM 'DEBUG1N': CALCULATES BONUS AND SALARY INCREASE           
************************************************************************
DEFINE DATA                                                             
PARAMETER                                                               
1 EMPLOYEE                                                              
  2 NAME      (A20)                                                     
  2 NUMCHILD  (N2)                                                      
  2 ENTRYDATE (D)                                                       
  2 SALARY    (P7.2)                                                    
  2 BONUS     (P7.2)                                                    
LOCAL                                                                   
1 TARGETDATE  (D)    INIT <D'2009-01-01'>                               
1 DIFFERENCE  (P3.2)                                                    
1 PERCENT     (P2.2) INIT <3.5>                                         
END-DEFINE                                                              
DIFFERENCE := (TARGETDATE - ENTRYDATE) / 365                            
IF DIFFERENCE GE 10        /* BONUS FOR YEARS IN COMPANY                
  BONUS := SALARY * PERCENT / 100                                       
END-IF                                                                  
SALARY := SALARY + 1800    /* SALARY PLUS ANNUAL INCREASE               
END

プログラム DEBUG2P

** PROGRAM 'DEBUG2P': CALLS 'DEBUG2N'FOR SALARY AND BONUS CALCULATION   
************************************************************************
DEFINE DATA                                                             
LOCAL                                                                   
1 EMPLOYEE    (A42)                                                     
1 REDEFINE EMPLOYEE                                                     
  2 NAME      (A20)                                                     
  2 NUMCHILD  (N2)                                                      
  2 ENTRYDATE (D)                                                       
  2 SALARY    (P7.2)                                                    
  2 BONUS     (P7.2)                                                    
END-DEFINE                                                              
NAME      := 'MEIER'                                                    
NUMCHILD  := 2                                                          
ENTRYDATE := D'1989-01-01'                                              
SALARY    := 99000                                                      
CALLNAT 'DEBUG2N' NAME NUMCHILD ENTRYDATE SALARY BONUS                  
WRITE 'EMPLOYEE RECEIVES:'   SALARY                                     
WRITE '    PLUS BONUS OF:'   BONUS                                      
END

サブプログラム DEBUG2N

** SUBPROGRAM DEBUG2N: CALLS 'DEBUG3N' AND 'DEBUG4N'FOR SPECIAL RATES   
************************************************************************
DEFINE DATA                                                             
PARAMETER                                                               
1 EMPLOYEE                                                              
  2 NAME      (A20)                                                     
  2 NUMCHILD  (N2)                                                      
  2 ENTRYDATE (D)                                                       
  2 SALARY    (P7.2)                                                    
  2 BONUS     (P7.2)                                                    
LOCAL                                                                   
1 TARGETDATE  (D)    INIT <D'2009-01-01'>                               
1 DIFFERENCE  (P3.2)                                                    
1 PERCENT     (P2.2) INIT <3.5>                                         
END-DEFINE                                                              
DIFFERENCE := (TARGETDATE - ENTRYDATE) / 365                            
IF DIFFERENCE GE 10        /* BONUS FOR YEARS IN COMPANY                
  BONUS := SALARY * PERCENT / 100                                       
END-IF                                                                  
IF NUMCHILD > 0                                                         
  CALLNAT 'DEBUG3N' NUMCHILD BONUS     /* SPECIAL BONUS                 
END-IF                                                                  
CALLNAT 'DEBUG4N' SALARY               /* SPECIAL SALARY INCREASE       
END                                                                     

サブプログラム DEBUG3N

** SUBPROGRAM 'DEBUG3N': CALCULATES SPECIAL BONUS                        
************************************************************************
DEFINE DATA                                                             
PARAMETER                                                               
1 NUMCHILD (N2)                                                         
1 BONUS    (P7.2)                                                       
END-DEFINE                                                              
BONUS := BONUS + NUMCHILD * 50                                          
END

サブプログラム DEBUG4N

** SUBPROGRAM 'DEBUG4N': CALCULATES SPECIAL SALARY INCREASE             
************************************************************************
DEFINE DATA                                                             
PARAMETER                                                               
1 SALARY (P7.2)                                                         
END-DEFINE                                                              
DECIDE FOR FIRST CONDITION                                              
  WHEN SALARY < 50000                                                   
    SALARY := SALARY + 1800                                             
  WHEN SALARY < 70000                                                   
    SALARY := SALARY + 1200                                             
  WHEN SALARY < 90000                                                   
    SALARY := SALARY + 600                                              
  WHEN NONE                                                             
    SALARY := SALARY + 300                                              
END-DECIDE                                                              
END

Top of page