Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報

トップ  >  APのアボートダンプ

「メモリダンプ解析ユーティリティ」を使用して、原因調査する。

APのアボートダンプ

メモリダンプ解析ユーティリティを使用して、ダメなプログラムがエラーになった原因を調査してみましょう。
いろいろなファイルは以下の場所に入っているものとします。

・アボートダンプファイル
装置名:FDU000
ファイル名:ABORTDMP
・ダメなプログラム
装置名:MSD002
ファイル名:TESTAPLML
ロードモジュール名:ABORTT

メモリダンプ解析ユーティリティ(#ABANA)を起動します。


起動すると、最初に以下のような画面になります。


アボートダンプの自動解析とデータ部の自動解析の2段階になっています。まずはアボートダンプの自動解析のためのパラメータ入力です。

MDDにはアボートダンプファイルの入っている装置の名前、MDFにはアボートダンプの名前を入れます。
今回の例では、MDDに「FDU000」、MDFには「ABORTDMP」と入力します。


ユーティリティがアボートダンプの中身を調べて、画面下にファイルの中身の情報を出力します。以下の例では、平成17年3月18日17:03に取ったABORTTのアボートダンプだと出力されています。


ユーティリティがアボートダンプの中身を解析するためには、ダメプログラムを参照する必要があります。
そのために、ダメプログラムがどこにあるかを入力します。
LMDに「MSD002」、LMFに「TESTAPLML」、LMNに「ABORTT」と入力します。


作業用のファイルと出力先プリンタを指定します。この例では作業ファイルに一時ファイルを使用していますが、安全を考えると作業ファイルを作成して、それを使用するのが良いでしょう。


以上まで入力すると、アボートダンプの自動解析を行います。場合によっては、ちょっと時間がかかるかもしれません。
もし「デバッグ情報がありません」というエラーメッセージが画面に出たら、それはダメプログラム「ABORTT」をコンパイルする時にデバッグ用のオプションを指定していなかったからです。このときはコンパイルから作業やり直すか、LMDパラメータに「NO」を指定してアボートダンプの中身をそのまま出力するしかありません。



で、アボートダンプの自動解析が終了すると、引き続きデータ部の自動解析のためのパラメータの入力になります。



どのCUのデータ部を対象とするか、コンパイルした時のCU名を入力します。全部のCUを対象とするならば、CUNに「!」を入力します。


データ部の出力形式を指定します。今回はあえて「BOTH」にしてみました。「BOTH」は文字形式と16進形式の両方で表示されます。「BOTH」だと情報がたくさん出すぎで見難いかもしれません。普通はALPHAで問題ありません。


すると、下のような情報をプリントアウトしてくれます。
「*** LINE ANALYZE ***」がアボートダンプの自動解析部分、「*** DATA ANALYZE ***」がデータ部の自動解析部分です。

自動解析結果の見方

・アボートダンプ解析部分

ERROR STATUS:」にエラーの原因が出ます。なんとなく英語ですが、たぶん「添字/指標の限界を超えています」という意味です。
CU NAME:」がエラーになったCU名です。それに対応するソースを探しましょう。
GENERATE LINE NO.:」がエラーになった行番号です。
今回の例では、ABORTTのソースの32行目で添字/指標の値が変になっているということがわかります。

・データ部解析部分

使用している変数のアボート時の値が出力されます。
出力値をBOTHにしてしまったので見難いですが、例えばDATA2にはアボート時には「ABCD」という値が入っていたことがわかります。
DATA4には初期値も何も入れていないので、INVALID DECIMAL DATAという警告が出ています。
エラーになった行で使用している変数の値を調べて、変な値になっている変数を探し、ソースを遡ってどこで変な値になったか調べます。

A-VX4     REL.  5.51   #ABANA  REV. I301       PROGRAM: ABORTT    REV. 0004   DATE: 17/03/18   TIME: 19:42:04   PAGE: 0001
 
    *** LINE ANALYZE *** 

          ERROR STATUS:           E C1302: (LIN=LLLLL) SUBSCRIPTING/INDEXING OUT OF RANGE 

 CU NAME:                ABORTT
           SECTION NO.:               0
 
          GENERATE LINE NO.:         32
 
          RELETIVE LINE NO.:         32
 
    *** DATA ANALYZE ***
 
              CU NAME: ABORTT          ANALYZE RANGE: ALL          OUTPUT FORM: BOTH

GLINE  RLINE  LEVEL NAME/OCC-NO.                    PIC/OCC-NO.   USAGE     CONTENTS 

       * WORKING-STORAGE SECTION * 
   11     11  01    DATA1                           9(02)         DISPLAY   70
                                                                            FF
                                                                            70
   12     12  01    DATA2                           X(00008)      DISPLAY   ABCD
                                                                            CCCC4444
                                                                            12340000 
   13     13  01    TAB 
   14     14    02  DATA3                           (    1)
                    I                                                       7  
                                                                            FFFFFC
                                                                            000070
   15     15    05  DATA4                           9(02)         DISPLAY   44                  * INVALID DECIMAL DATA *
                                                                            00 
   14     14    02  DATA3                           (    2)
                    I                                                       7  
                                                                            FFFFFC
                                                                            000070 
   15     15    05  DATA4                           9(02)         DISPLAY   44                  * INVALID DECIMAL DATA *
                                                                            00 
   14     14    02  DATA3                           (    3)
                    I                                                       7  
                                                                            FFFFFC
                                                                            000070 
   15     15    05  DATA4                           9(02)         DISPLAY   44                  * INVALID DECIMAL DATA *
                                                                            00
 
       * SCREEN SECTION *
   17     17  SD    GAMEN 
   17     17  01    FILLER
   18     18    02  ENDSTS                          X(00002)      DISPLAY   00
                                                                            FF
                                                                            00
   18     18    02  FILLER                          9(02)         DISPLAY   10
                                                                            FF
                                                                            10
   18     18    02  FILLER                          9(02)         DISPLAY   15
                                                                            FF
                                                                            15
   18     18    02  FILLER                          9(04)         DISPLAY   0
                                                                            FFFF
                                                                            0000
   18     18    02  FILLER                          X(00025)      DISPLAY 
                                                                            4444444444444444444444444
                                                                            0000000000000000000000000
   18     18    02  FILLER                          X(00002)      DISPLAY
                                                                            44
                                                                            00
   19     19  01    TEST1-ACT
   20     20    05  SD.0001
   21     21    10  SD.0002                         9(02)         DISPLAY   70
                                                                            FF
                                                                            70
   22     22  01    TEST1-DSP
   23     23    05  SD.0003
   24     24    10  SD.0004                         X(00010)      DISPLAY   DATA(9) 
                                                                            CCEC4F5444
                                                                            4131D9D000


自動解析といっても、基本的に20年ぐらい前の機能なので、過大な期待は持たないように。

端末、ワークステーションの種類によっては上の場合もあります。
「LMD」にNOを指定することができますが、こうするとユーティリティが解析するためのデータを取得できないので、自動解析されません。アボートダンプの中身がほとんどそのままプリンタ出力されることになりますが、たぶん出力された情報を見てもさっぱり理解できないと思います。
プログラムをCOBOL85でコンパイルするときに、DIOというパラメータをYESにする必要があります。
当然ながら自動解析はされないので、ダンプの内容を自力で解析しなければなりません。ほとんど不可能に近い作業です。