COBOL2002 Javaプログラム呼び出し機能ガイド


5.2.2 デバッグ情報の種類と出力フォーマット

Javaプログラム呼び出し機能で出力するデバッグ情報の種類と出力フォーマットについて説明します。

ここでは,出力フォーマットに次の表記を使用します。

〈この項の構成〉

(1) デバッグ情報ファイルの出力例

デバッグ情報ファイルには,出力日時とデバッグ情報を1レコードとするデバッグ情報レコードが出力されます。

Javaプログラムを呼び出すCOBOLプログラムとデバッグ情報ファイルの出力例を次に示します。

Javaプログラムを呼び出すCOBOLプログラムの例
      *>  Javaのsampleクラスのクラス参照を取得する ---------------------
      
           CALL 'CBLJGETCLASS' USING CBLJENV sample CLASSREF.
      
      *>  Javaのsampleクラスのインスタンスを生成する -------------------
      
           CALL 'CBLJNEW' USING CBLJENV CLASSREF NO-ARG OBJREF.
      
      *>  SampleFieldに値を設定する ------------------------------------
      
           MOVE 333  TO ARG1-01-AREA.
      
           CALL 'CBLJSETFIELD' USING CBLJENV
                               OBJREF SampleField ARG1-01.
      
      *>  SampleMethodメソッドを呼び出す -------------------------------
 
           MOVE 4    TO ARG1-01-AREA.
      
           MOVE 'サンプル' TO WORK.
           CALL 'CBLJXTOSTRING' USING CBLJENV WORK WORK-L ARG1-02-AREA.
      
           COMPUTE ARGPTR(1) = FUNCTION ADDR( ARG1-01 ).
           COMPUTE ARGPTR(2) = FUNCTION ADDR( ARG1-02 ).
           COMPUTE ARGPTR(3) = ZERO.
      
           CALL 'CBLJINVOKE' USING CBLJENV
                             OBJREF SampleMethod ARG-LIST RTN1.
      
           CALL 'CBLJDISPLAY' USING CBLJENV RTN1-AREA.
      
      *>  Javaのインスタンスを解放する ---------------------------------
      
           CALL 'CBLJRELEASE'  USING CBLJENV OBJREF.
      
      *>  Javaの実行環境を削除する -------------------------------------
      
           CALL 'CBLJFINALIZE' USING CBLJENV.
デバッグ情報ファイルの出力例

[図データ]

[図データ]

(2) デバッグ情報の種類と出力フォーマット

ここでは,デバッグ情報ファイルに出力されるデバッグ情報の種類と出力フォーマットについて説明します。

デバッグ情報ファイルには,デバッグ情報がデバッグ情報レコードとして出力されます。

出力されるデバッグ情報を次の表に示します。

表5‒1 出力されるデバッグ情報

項番

デバッグ情報

出力情報

1

サービスルーチン呼び出し情報

サービスルーチンを呼び出したCOBOLプログラムの情報と指定した引数の内容が出力されます。

2

サービスルーチン返却値情報

サービスルーチンの戻り値と更新した引数の内容が出力されます。

3

オブジェクト参照解放漏れ情報

オブジェクト参照の解放漏れが通知されます。

4

Java例外情報

Java例外発生時の詳細情報が出力されます。

5

実行時エラー情報

実行時エラー発生時の詳細情報が出力されます。

6

ユーザデバッグ情報(文字列)

プログラムで指定したデバッグ情報(文字列)が出力されます。

7

ユーザデバッグ情報(メモリ)

プログラムで指定したデバッグ情報(メモリ領域の内容)が出力されます。

8

実行環境情報

Javaプログラム呼び出し機能の実行環境情報が出力されます。

デバッグ情報レコードのフォーマットを次の図に示します。

図5‒1 デバッグ情報レコードのフォーマット

[図データ]

デバッグ情報レコードヘッダとして出力される情報を次に示します。

それぞれのデバッグ情報で出力される情報について説明します。

各項に示すフォーマットは,デバッグ情報レコードのデバッグ情報部分だけを示します。一つのデバッグ情報で2レコード以上のレコードが出力される場合があります。この場合,それぞれの行にデバッグ情報レコードヘッダが出力されます。

また,デバッグ情報にはメモリ領域の内容が領域のダンプリストのフォーマットで出力されることがあります。出力フォーマットについては,「(3) データの種類と出力フォーマット」の「(l) 領域のダンプリストの出力フォーマット」を参照してください。

(a) サービスルーチン呼び出し情報

サービスルーチンが呼び出されたとき,サービスルーチンを呼び出したCOBOLプログラムの情報と指定した引数の内容が出力されます。

フォーマット
#△COBOLプログラム名△(行番号/カラム位置)
argument-1(引数1のデータ型):△引数1の内容
  :
argument-n(引数nのデータ型):△引数nの内容
COBOLプログラム名

サービスルーチンを呼び出したCOBOLプログラム名が出力されます。

行番号/カラム位置

サービスルーチンを呼び出したCALL文の行番号とカラム位置が出力されます。-DebugInfコンパイラオプションを指定してコンパイルしたプログラムの場合,行番号は6けたの数値,カラム位置は2けたの数値で出力されます(指定していない場合は,'******/**'が出力されます)。

引数nのデータ型/内容

n番目の引数のデータ型を示す文字列と内容が出力されます。内容の表示形式はデータ型によって異なります。表示形式については,「(3) データの種類と出力フォーマット」を参照してください。

領域のダンプリストなど,引数nの内容が複数レコードになる場合は,「:」のあとで改行され,次のレコードから引数nの内容が出力されます。

出力例

[図データ]

注意事項

引数のCBLJENV集団項目の指定が誤っている場合など,サービスルーチンの処理が継続できないときは,この情報は出力されないことがあります。

(b) サービスルーチン返却値情報

サービスルーチンの処理が終了するとき,サービスルーチンの戻り値とサービスルーチンが更新した引数の内容が出力されます。

フォーマット
#△return(戻り値)
argument-x(引数xのデータ型):△引数xの内容
  :
戻り値

サービスルーチンの戻り値が出力されます。

引数xのデータ型と引数xの内容

サービスルーチンが更新したx番目の引数のデータ型を示す文字列と内容が出力されます。内容の表示形式はデータ型によって異なります。表示形式については,「(3) データの種類と出力フォーマット」を参照してください。サービスルーチンが更新する引数がない場合は出力されません。

領域のダンプリストなど,引数xの内容が複数レコードになる場合は,「:」のあとで改行され,次のレコードから引数xの内容が出力されます。

出力例

[図データ]

(c) オブジェクト参照解放漏れ情報

CBLJFINALIZEサービスルーチン実行時,オブジェクト参照の解放漏れがある場合,解放されていないオブジェクト参照のアドレスが通知されます。解放漏れの個数だけレコードが出力されます。

フォーマット
Unreleased△object△reference△アドレス
アドレス

解放されていないオブジェクト参照のアドレス(16進形式)が出力されます。

出力例

[図データ]

(d) Java例外情報

Java例外発生時の詳細情報が出力されます。

フォーマット
Handled△Java△Exception: CBLJEXCEPTION=例外オブジェクトのアドレス
Java例外の説明
JNI関数名(引数情報)
例外オブジェクトのアドレス

CBLJENV集団項目のCBLJEXCEPTION項目に設定する例外オブジェクトのアドレス(16進形式)が出力されます。Javaプログラムから例外がスローされた場合に設定されます。デバッグ情報出力機能では,JNIの例外でCBLJEXCEPTION項目を更新しない場合は,このレコードは出力されません。例外処理については,「3.2.4 例外処理のコーディング」を参照してください。

Java例外の説明

JNI関数の例外およびスタックのバックトレースが出力されます。

JNI関数名

最後に呼び出したJNI関数名が出力されます。

引数情報

JNI関数に渡した引数の値の並びが出力されます。引数が複数ある場合は,コンマ(,)で区切って出力されます。

出力例

[図データ]

(e) 実行時エラー情報

実行時エラー発生時の詳細情報が出力されます。

フォーマット
KCCCnnnnR-x△詳細メッセージ
KCCCnnnnR-x

実行時のメッセージIDが出力されます。

詳細メッセージ

実行時のメッセージのエラー情報に出力される詳細メッセージが出力されます。

出力例

[図データ]

(f) ユーザデバッグ情報(文字列)

CBLJDEBUGSTRINGサービスルーチンを呼び出したとき,ユーザデバッグ情報として,指定された文字列がデバッグ情報ファイルに出力されます。

フォーマット
#△COBOLプログラム名△(行番号/カラム位置)
ユーザデバッグ情報
COBOLプログラム名

CBLJDEBUGSTRINGサービスルーチンを呼び出したCOBOLプログラム名が出力されます。

行番号/カラム位置

CBLJDEBUGSTRINGサービスルーチンを呼び出したCALL文の行番号とカラム位置が出力されます。-DebugInfコンパイラオプションを指定してコンパイルしたプログラムの場合,行番号は6けたの数値,カラム位置は2けたの数値で出力されます(指定していない場合は,'******/**'が出力されます)。

ユーザデバッグ情報

CBLJDEBUGSTRINGサービスルーチンの引数2に指定した英数字項目の値が出力されます。引数3に指定した長さだけ出力されます。

注意事項

ユーザデバッグ情報に,NULL終端文字(X'00')が含まれる場合は,それ以降の文字列は出力されません。

(g) ユーザデバッグ情報(メモリ)

CBLJMEMDUMPサービスルーチンを呼び出したとき,指定されたメモリ領域のダンプリストがデバッグ情報ファイルに出力されます。

フォーマット
#△COBOLプログラム名△(行番号/カラム位置)
領域のダンプリスト
COBOLプログラム名

CBLJMEMDUMPサービスルーチンを呼び出したCOBOLプログラム名が出力されます。

行番号/カラム位置

CBLJMEMDUMPサービスルーチンを呼び出したCALL文の行番号とカラム位置が出力されます。-DebugInfコンパイラオプションを指定してコンパイルしたプログラムの場合,行番号は6けたの数値,カラム位置は2けたの数値で出力されます(指定していない場合は,'******/**'が出力されます)。

領域のダンプリスト

CBLJMEMDUMPサービスルーチンの引数2に指定したポインタ項目が指すメモリ領域のダンプリスト(16進形式)が出力されます。引数3に指定した長さだけ出力されます。

(h) 実行環境情報

Javaプログラム呼び出し機能の実行環境情報が出力されます。CBLJINITIALIZEサービスルーチンで実行環境が構築されたあとに出力されます。

フォーマット
Environment:△環境変数名=環境変数の値
  :
環境変数名

Javaプログラム呼び出し機能で使用する環境変数の名称が出力されます。実行時環境変数が指定されているとき,このレコードは繰り返して出力されます。実行時環境変数については,「6.2 実行時環境変数」を参照してください。

環境変数の値

環境変数に指定された値が出力されます。ただし,値の長さが2,048バイトを超えるとき,先頭から2,048バイトまでが出力されます。

出力例

[図データ]

(3) データの種類と出力フォーマット

ここでは,デバッグ情報で出力される引数などのデータの種類の出力フォーマットについて説明します。

(a) 引数の内容の出力フォーマット

データの内容は,出力されるデータの種類(データ型)によって出力フォーマットが異なります。

デバッグ情報に出力されるデータの種類を次の表に示します。

表5‒2 デバッグ情報に出力されるデータの種類

項番

データの種類(データ型)

「データ型」として出力される文字列

1

CBLJENV集団項目

CBLJENV

2

動的長基本項目/名前型集団項目

CBLJNAME

3

パラメタ型集団項目

CBLJPARAM

4

引数リスト型集団項目

CBLJLIST

5

クラス参照

CLASSREF

6

オブジェクト参照

OBJECTREF

7

英数字項目

ALNUM

8

日本語項目

JPN

9

数字項目(4バイト2進形式)

BIN4

10

Java型名

JAVATYPE

11

ポインタ項目(配列アドレス)

ADDR

(b) CBLJENV集団項目

CBLJENV集団項目は次のフォーマットで出力されます。

フォーマット
領域のダンプリスト
▽option-1:△Java VM起動オプション1
  :
▽option-n:△Java VM起動オプションn
領域のダンプリスト

CBLJENV集団項目領域のダンプリスト(16進形式)が出力されます。

Java VM起動オプションn

n番目に指定したJava VM起動オプション文字列が出力されます。出力長はCBLJENV集団項目中のCBLJSTRMAXLENに指定した値です。

この情報は,CBLJINITIALIZEサービスルーチンでのデバッグ情報出力時だけ出力されます。

(c) 動的長基本項目/名前型集団項目

名前型集団項目は次のフォーマットで出力されます。

フォーマット
'名前文字列'
名前文字列

名前型集団項目に指定した文字列が出力されます。NULL終端文字(X'00')までが出力されます。

(d) パラメタ型集団項目

パラメタ型集団項目は,パラメタ型集団項目中のJavaの型を表す文字に従ってデータの内容が出力されます。

フォーマット
Javaの型:△データの内容
Javaの型

パラメタ型集団項目中のJavaの型を表す文字列が出力されます。パラメタ型集団項目については,「6.1.1 サービスルーチンで使用する引数」の「(3) パラメタ型集団項目」を参照してください。

パラメタ型集団項目が未構築の場合は,次に示す内容が出力されます。

[図データ]

Javaの型を表す文字列に該当しない値の場合は,次に示す内容が出力されます。

[図データ]

xx:パラメタ型集団項目中のJavaの型を表す文字列の先頭1バイトの値(16進形式)を示します。

データの内容

次の表に示す内容が出力されます。

表5‒3 パラメタ型集団項目中のJavaの型とデータの内容

項番

Javaの型を表す文字とJavaの型

「データの内容」に出力される内容

1

V (void)

(出力しない)

2

B (byte)

領域(1バイト)の内容(16進形式)△(値)

3

C (char)

領域(2バイト)の内容(16進形式)△(値)

4

S (short)

領域(2バイト)の内容(16進形式)△(値)

5

I (int)

領域(4バイト)の内容(16進形式)△(値)

6

J (long)

領域(8バイト)の内容(16進形式)△(値)

7

F (float)

領域(4バイト)の内容(16進形式)△(値)

8

D (double)

領域(8バイト)の内容(16進形式)△(値)

9

Z (boolean)

領域(1バイト)の内容(16進形式)△(値)

10

T (クラス参照)

(f) クラス参照のポインタ項目」を参照してください。

11

L (オブジェクト参照)

(g) オブジェクト参照のポインタ項目」を参照してください。

12

[ (配列オブジェクト)

注※

値の表示精度は,Javaプログラム呼び出し機能が使用しているCコンパイラの仕様に従うため,COBOLまたはJavaプログラムで設定した値と異なることがあります。

(e) 引数リスト型集団項目

引数リスト型集団項目は,パラメタ型集団項目を指すアドレス値の配列です。配列の終端まで出現順序で配列の要素(パラメタ型集団項目)のデータの内容が出力されます。

フォーマット
[出現順序]△パラメタ型集団項目で出力する内容
出現順序

パラメタ型集団項目を指すアドレス値の出現順序(1から昇順)が出力されます。

配列の要素がない(配列の先頭がNULL値)の場合は,次に示す内容が出力されます。

[図データ]

(f) クラス参照のポインタ項目

クラス参照を示すポインタ項目は,アドレスとクラス名が出力されます。

フォーマット
アドレス[クラス名]
アドレス

ポインタ項目の値

クラス名

ポインタ項目が示すクラス参照に保持しているクラス名が出力されます。クラス参照が未構築の場合は「(null)」が出力されます。

(g) オブジェクト参照のポインタ項目

オブジェクト参照を示すポインタ項目は,アドレスが出力されます。

フォーマット
アドレス[クラス名]
アドレス

ポインタ項目の値

クラス名

ポインタ項目が示すオブジェクト参照が指すクラス参照に保持しているクラス名が出力されます。オブジェクト参照が未構築,またはクラス参照のアドレスがNULL値の場合は「(null)」が出力されます。

(h) 英数字項目/日本語項目

英数字項目および日本語項目は,サービスルーチンに同時に指定した文字数(数字項目の値)分の領域のダンプリストが出力されます。

フォーマット
領域のダンプリスト
領域のダンプリスト

英数字項目または日本語項目の領域のダンプリストが出力されます。出力される領域サイズ(バイト数)を次に示します。

  • 英数字項目の場合,指定した文字数

  • 日本語項目の場合,指定した文字数×2

(i) 数字項目(2進形式)

数字項目(2進形式)は,指定した数字項目の値とメモリ領域の内容(16進形式)が出力されます。

フォーマット
領域の内容(16進形式)△(値)
領域の内容(16進形式)

数字項目のメモリ領域の内容(16進形式)が出力されます。数字項目に該当するバイト数だけ出力されます。

数字項目の値(10進形式)が出力されます。

(j) Java型名

Java型名は,指定されたJava型名が出力されます。フォーマットについては,「(d) パラメタ型集団項目」のJavaの型を参照してください。

(k) ポインタ項目

ポインタ項目は,アドレス値が出力されます。

フォーマット
アドレス
アドレス

ポインタ項目に設定されているアドレス値が出力されます。

(l) 領域のダンプリストの出力フォーマット

領域のダンプリストを出力する場合,該当するデータが示すメモリ領域の内容が16進形式で出力されます。

フォーマット
△△アドレス:△メモリ領域の内容(16進形式)△'メモリの内容(文字列)'
アドレス

領域の先頭アドレスが出力されます。

メモリ領域の内容(16進形式)

領域の先頭アドレスから16バイト分のメモリ領域の内容(16進形式)が出力されます。

  • 区切り文字として,4バイトごとに半角空白が出力されます。

  • a〜fは小文字で出力されます。

メモリ領域の内容(文字列)

領域の先頭アドレスから16バイト分のメモリ領域の内容を,1バイトずつ文字に変換した文字列が出力されます。ASCIIコードの制御コードおよび文字が割り当てられていないコードに該当する場合は,「.(ピリオド)」が出力されます。

メモリ領域の内容は1レコードに16バイトずつ出力されます。出力されるサイズが16バイトを超える領域の場合は,16バイトごとに複数のレコードが出力されます。

また,16バイトに満たない場合,メモリ領域の内容(16進形式)の残りの領域には半角空白が出力され,メモリ領域の内容(文字列)には領域の終端の位置に「'」が出力されます。

CBLJGETCLASSサービスルーチンの引数(CBLJENV集団項目)の出力例

[図データ]