18.6.4 動的なリンクのプログラム検索トレース機能
プログラム検索トレース機能では,次のトレース情報を出力します。
-
動的なリンクによる,プログラム呼び出し時の共用ライブラリの検索情報
-
プレロード時の共用ライブラリのロード情報
(1) 環境変数CBLPGMSEARCHTRC
実行時環境変数CBLPGMSEARCHTRCには,トレース情報を出力するファイル名を指定します。
- 形式
CBLPGMSEARCHTRC=プログラム検索トレースファイル名
- 規則
-
-
プログラム検索トレースファイル名は,絶対パスで指定してください。
-
プログラム検索トレースファイル名のパスに誤りがある,アクセス権がないなどの理由で,プログラム検索トレースファイルが開けない場合,警告メッセージが出力されます。このとき,プログラム検索トレース情報は出力されません。
-
次のどれかに該当するCALL文では,プログラム検索トレース情報は出力されません。
・-DynamicLinkオプションの指定がないCOBOLプログラムのCALL文
・-DynamicLink,IdentCallオプションを指定したCOBOLプログラムの定数指定のCALL文
・-DynamicLink,Callオプションを指定したCOBOLプログラムの定数指定のCALL文による内部プログラム呼び出し
・-DynamicLink,Callオプションを指定したCOBOLプログラムの定数指定のCALL文による2回目以降のプログラム呼び出し
-
実行時環境変数CBLPGMSEARCHTRCに指定したプログラム検索トレースファイル名は,次の形式のファイル名に変更されて出力されます。
[形式]
ファイル名[_i]_j.拡張子
i:スレッド識別子の値です。マルチスレッド対応COBOLプログラムのときだけ付加されます。
j:管理番号です。1または2が付加されます。
-
プログラム検索トレースファイルのファイルサイズが実行時環境変数CBLPGMSEARCHTRC_SIZEの指定値を超えた場合,管理番号を切り替えて,ファイルの先頭からトレース情報が出力されます。切り替え後のファイル名と同一名称のファイルが存在する場合,同一名称のファイルは削除されます。必要な場合は,削除される前にバックアップをとってください。
-
複数プロセスが並列で実行される場合,プログラム検索トレースファイル名には一意となる名称を指定する必要があります。同じプログラム検索トレースファイル名を指定し,プログラムを並列で実行した場合のプログラム検索トレースの出力結果は保証しません。
-
-DynamicLink,Callオプションを指定したCOBOLプログラムでADDR関数にプログラム名を指定した場合,ADDR関数でのプログラム検索情報がCALL文のプログラム検索トレースとして出力されます。
-
ディスクの空き容量不足などで,プログラム検索トレースファイルへのトレース出力中にエラーが発生した場合は,それ以降のトレース情報は出力されません。なお,このとき,実行時メッセージは出力されません。
-
(2) 環境変数CBLPGMSEARCHTRC_SIZE
実行時環境変数CBLPGMSEARCHTRC_SIZEには,プログラム検索トレースファイル名を切り替えるサイズを指定します。
- 形式
CBLPGMSEARCHTRC_SIZE=プログラム検索トレースファイル名を切り替えるサイズ(1〜2,000,000)
- 規則
-
-
ファイルサイズはKB単位で指定してください。
-
指定に誤りがある場合,または指定がない場合は10,240が仮定されます。
-
実行時環境変数CBLPGMSEARCHTRC_SIZEの指定に従い,プログラム検索トレースファイルのサイズが指定値の上限を超えた場合,ファイル名の管理番号が切り替えられます。
切り替え先のファイルが開けないときは,警告メッセージが出力されます。なお,それ以降のプログラム検索トレースは出力されません。
-
プログラム検索トレースファイルの管理番号1のファイルが存在しない場合は,管理番号1のファイルにトレース情報が出力されます。管理番号1のファイルがすでに存在する場合は,次に示す管理番号のファイルにトレース情報が出力されます。
管理番号1ファイル
管理番号2のファイル
トレース情報出力
ファイルサイズが上限を超えていない
−
管理番号1のファイルに追加書きで出力する
ファイルサイズが上限を超えている
ファイルが存在しない
管理番号2のファイルを作成して出力する
ファイルが存在する
ファイルサイズが上限を超えていない
管理番号2のファイルに追加書きで出力する
ファイルサイズが上限を超えている
最終更新日時が古い管理番号のファイルを削除,作成して出力する
- (凡例)
-
−:条件なし
-
(3) 注意事項
-
プログラム検索トレース機能機能はデバッグ機能です。プログラム検索トレース機能を使用すると,動的なリンクの実行性能が低下するため,デバッグ時にだけ使用してください。
-
Linuxの場合,プログラム検索トレースの共用ライブラリ名の情報には,環境変数CBLLSLIBに指定した値がそのまま出力されます。環境変数CBLLSLIBに共用ライブラリ名を絶対パスで指定していない場合,検索対象の共用ライブラリがどこに存在するのかは,システム環境変数LD_LIBRARY_PATHに指定されたパスを先頭から順に確認することで特定できます。
(4) プログラム検索トレースの内容
-
日付/時刻を出力する。
-
トレース出力の契機を出力する。
PRE
環境変数CBLPRELOADで指定されたプレロードリストファイルに記述された共用ライブラリの情報を出力する。
PROG
CALL文が実行されたプログラム名を5.に示す。
CALL
CALL文の処理であることを示す。3.がprogramの場合,呼び出すプログラム名を5.に示す。
-
処理内容の詳細を出力する。
open
ファイルのオープン処理であることを示す。
load
共用ライブラリのロード処理であることを示す。
program
呼び出し先プログラムの検索処理を開始したことを示す。
search
プログラムの検索処理であることを示す。
getaddr
プログラムのアドレス取得処理であることを示す。
-
処理の実行結果を出力する。
SUCCESS
処理が成功したことを示す。
WARNING
処理中にエラーが発生したことを示す。処理は継続する。
ERROR
処理中にエラーが発生したことを示す。処理は終了する。
NOTFOUND
処理を実行した結果,呼び出し先プログラムが見つからなかったことを示す。
FOUND
処理を実行した結果,呼び出し先プログラムが見つかり,プログラム検索処理が終了したことを示す。
-
処理の対象ファイルまたは対象プログラムを出力する。
INSIDE PROGRAM
呼び出しできる内側のプログラムに対する処理であることを示す。
CALLED PROGRAMS
呼び出し済みプログラムに対する処理であることを示す。
LINKED TO STATICALLY
静的にリンクされた最外側のプログラムに対する処理であることを示す。
ALREADY LOADED LIBRARY
ロード済みの共用ライブラリに対する処理であることを示す。
上記以外(ファイル名またはプログラム名)
ファイルまたはプログラムに対する処理であることを示す。
-
環境変数CBLPRELOADの指定がある場合は,プレロードリストファイルに記述された共用ライブラリに対するロード結果を出力する。ロード失敗時は,エラー番号(n)と詳細メッセージ(xxxxx)を出力する。
なお,エラー原因によっては,詳細メッセージが出力されない場合がある。また,Linuxの場合のエラー番号は不定である。
環境変数CBLPRELOADの指定がない場合,環境変数CBLPRELOADの情報は出力しない。
-
呼び出しできる内側のプログラムの中から呼び出し先プログラムを検索した結果を出力する。この情報は,一意名指定のCALL文のときだけ出力する。
-
動的なリンクによってすでに呼び出しされたプログラムから呼び出し先プログラムを検索した結果を出力する。
-
静的にリンクされた最外側のプログラムから呼び出し先プログラムを検索した結果を出力する。ただし,Linuxの場合,9.と10.を同時に処理するため,10.の出力だけとなる。
-
すでにロードされている共用ライブラリ中から呼び出し先プログラムを検索した結果を出力する。なお,Linuxの場合,9.の静的にリンクされた最外側のプログラムからの検索処理を含む。
-
未ロードの共用ライブラリから呼び出し先プログラムを検索した結果を出力する。
AIXの場合,環境変数CBLLTAGにNOARMBRが指定されていない環境では,すでにロードされているシステムの共用ライブラリなどを検索した結果も出力する。
-
呼び出し先プログラムを含む共用ライブラリをロードした結果を出力する。
-
呼び出し先プログラムのアドレスを取得した結果を出力する。
-
共用ライブラリのロードに失敗した場合,エラー番号と詳細メッセージを出力する。なお,エラー原因によっては,詳細メッセージが出力されない場合がある。また,Linuxの場合のエラー番号は不定である。