汎用トレース機能の使用

アセンブラーの汎用トレース機能 (GTF) は、アセンブラー プログラムの問題の箇所および原因を特定するプロセスの高速化に役立つデバッグ ツールです。GTF ツールを使用して、プログラムで実行された操作を示すトレース ファイルを作成します。デバッグするプログラムをコンパイルする必要はありません。各種レベルの詳細を要求できます。たとえば、プログラム レベルの情報を要求するトレースを実行してから、トレースの詳細レベルと開始ポイントおよび終了ポイントを指定して特定セクションに対する追加トレースを実行できます。

注: Enterprise Server 環境では、すべてのトレース ファイルがサーバーによる排他的アクセスのためにロックされます。そのため、ファイルを調べるには、まずサーバーを停止する必要があります。

汎用トレース機能を有効にするには、環境変数 GTFFILE を、トレース ファイルの絶対パスおよびファイル名に設定します。この環境変数は、%ProgramFiles(x86)%\Micro Focus\Enterprise Developer\bin\MF370CTL.CFG ファイルで設定します。

GTF の構成

次の GTF オプションは、GTFFILE 環境変数の後に指定できます。

オプション 説明
GTFIMIN トレースを開始する命令カウント。デフォルトは 00000000 です。
GTFIMAX トレースを終了する命令カウント。デフォルトは FFFFFFFF です。
GTFAMIN トレースを開始する命令アドレス。デフォルトは 00000000 です。
GTFAMAX トレースを終了する命令アドレス。デフォルトは FFFFFFFF です。
GTFOPT 詳細のレベル。この環境変数は、次の 3 文字のコードを 1 つ以上カンマ区切りで設定して目的の詳細レベルを示すことができます。
INS
各命令をトレースします。
BAL
BALR、BASR、BASSM の各命令をトレースします。
SVC
SVC の各命令をトレースします。
PGM
LOAD、DELETE、LINK をそれぞれトレースします。
FOC
ファイルの OPEN および CLOSE 操作をそれぞれトレースします。
FIO
ファイルの入出力操作と OPEN および CLOSE をそれぞれトレースします。
MEM
GETMAIN、FREEMAIN、STORAGE をトレースします。
ALL
上記のすべてのトレース オプション
REG
16 の汎用レジスタをトレース イベントごとにトレースします。
デフォルト値は BAL、PGM、FOC です。

トレース ファイルのサイズは、指定したオプションによって変わり、非常に大きくなる場合があります。このため、最初に必ず、トレースをデフォルトのオプションで実行して詳細トレースの最適な開始ポイントを確認することをお勧めします。FIO、INS、ALL などのオプションを使用して詳細トレースを実行する場合、GTFIMIN および GTFIMAX、または GTFAMIN および GTFAMAX オプションを使用して開始ポイントと終了ポイントを指定します。

各トレース ポイントでの 16 の汎用レジスタの内容が必要な場合、REG オプションと他のオプションを一緒に指定することもできます。ただし、これによりトレース ファイルのサイズは 3 倍に増加するため注意してください。レジスタの内容は、トレース操作前と同様に表示されるため、REG オプションと次のオプションを一緒に使用する方法が最も有用です。
  • INS。このオプションでは、すべての命令がトレースされるためです。
  • MEM および PGM。これらのオプションを使用する場合、LOAD や GETMAIN などの影響を受ける命令の最後にトレースが実行されるためです。

指定したトレース オプションに関係なく、プログラムの割り込みが行われると、トレース ファイルには必ず割り込みの原因となった命令の追加行が含まれます。これらの行はプログラム状態語 (PSW) を表示し、PSW には最初の語の下位バイトの割り込みコード、およびレジスタが含まれます。

トレース ファイル

GTF トレース ファイルは、ASCII 互換エディターまたはワード プロセッサを使用して表示または印刷できます。ファイルの先頭には、ファイルの生成に使用される GTF オプション、およびトレースの開始日時があります。ファイルの最終行には、トレースの終了日時が表示されます。この行がない場合、トレースが正常に終了しなかったために完了していない可能性があります。この問題は、汎用トレース機能が有効なアセンブラー デバッガーを使用して対話式デバッグ セッションを実行している場合に起こることがあり、復元できないエラーが発生します。GTF トレース ファイルを完了させるには、デバッグ セッションを強制終了させずに終了させるようにします。S(tep) または G(o) を押して、トレース ファイルにプログラム例外を記録してからデバッグ セッションを停止します。

ファイルの先頭の情報と最終行の間には、個々のトレース レコードがあります。各レコードには、次の情報項目があります。
  • 命令カウント。トレース ポイントに至るまでに実行された命令の総数を示す 16 進数のカウンターです。このカウントは、障害発生時点より前に同じコードを何度も実行する複雑なアプリケーションに陥るポイントで詳細トレースを開始する場所を判断する場合に非常に役立ちます。オプション GTFIMIN を使用して、トレースの開始命令カウントを設定します。
  • 命令アドレス。現在のトレース ポイントの次の命令の線形アドレスです。このアドレスでは、詳細トレースの開始場所を指定する代替方法が提供されます。オプション GTFAMIN を使用して、トレースの開始命令アドレスを設定します。
  • 命令操作。このフィールドは、トレース ポイントで実行する機械命令またはランタイム操作を示します。トレース行のタイプに応じて、追加情報が表示される場合があります。
    トレース行のタイプ 説明
    INS 16 進数の機械命令 (長さは 2、4 または 6 バイト)
    PGM LOAD、DELETE、または LINK のプログラム名およびエントリ
    FOC および FIO DCB、ACB、または DTF 制御ブロック アドレス
    MEM 割り当てられた、または割り当て解除されたメモリの長さおよびアドレス
デフォルトのトレース オプション
デフォルトのトレース オプション GTFOPT=PGM,BAL,FOC を使用して、LOAD、DELETE、LINK、BALR、BASR、OPEN、CLOSE の各操作をトレースします。これにより、アプリケーションの実行内容の概要を取得したり、必要に応じてより詳細なトレースの開始ポイントおよび終了ポイントを特定したりできます。

次に、IMS COBOL およびアセンブラー アプリケーションのデフォルト トレースのトレース ファイルの例を示します。

GTF option GTFFILE =D:\MFUSER\CONFIG\GTF.LOG                          
GTF option GTFOPT  =BAL,FOC,PGM                                       
GTF option GTFIMIN =00000000                                          
GTF option GTFIMAX =FFFFFFFF                                          
GTF option GTFAMIN =00000000                                          
GTF option GTFAMAX =FFFFFFFF                                          
GTF trace file DATE=000114 TIME=08495898
INS-CTR  INS-ADDR INS-OP  
00000043 81000188 BALR     05EF        
00000044 81005998 BALR     05F0        
00000047 810059A2 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
00000051 810001E6 LOAD     NAME=LDDECTBL ENTRY=810059D8
000006DA 8100033A BALR     05EF        
00000704 81005998 BALR     05F0        
00000707 810059A2 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
00000762 81000E10 LOAD     NAME=CG#CTL   ENTRY=80012CF0
00000988 810059B0 BALR     05F0        
0000098B 810059BA LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
00001051 8100033A BALR     05EF        
0000107B 81005998 BALR     05F0        
0000107E 810059A2 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
000012F7 810059B0 BALR     05F0        
000012FA 810059BA LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
00001360 8100033A BALR     05EF        
0000139C 81005998 BALR     05F0        
0000139F 810059A2 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
00001618 810059B0 BALR     05F0        
0000161B 810059BA LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
00001CDC 8100033A BALR     05EF        
00001D06 81005998 BALR     05F0        
00001D09 810059A2 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
00001F82 810059B0 BALR     05F0        
00001F85 810059BA LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
00001F92 810003EA DELETE   NAME=LDDECTBL ENTRY=00000000
00001FED 81007628 BALR     05EF        
00001FEE 8100CE38 BALR     05F0        
00001FF1 8100CE42 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
00001FFB 81007686 LOAD     NAME=LDDECTBL ENTRY=80011228
00002684 810077DA BALR     05EF        
000026AE 8100CE38 BALR     05F0        
000026B1 8100CE42 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
0000270C 810082B0 LOAD     NAME=CG#CTL   ENTRY=8100CE78
00002932 8100CE50 BALR     05F0        
00002935 8100CE5A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
00002FFB 810077DA BALR     05EF  
.........................................
.........................................      
0000B04A 81022160 BALR     05F0        
0000B04D 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000B0AA 8101CAEA BALR     05EF        
0000B0EF 81022148 BALR     05F0        
0000B0F2 81022152 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
0000B114 81022160 BALR     05F0        
0000B117 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000B174 8101CAEA BALR     05EF        
0000B1B0 81022148 BALR     05F0        
0000B1B3 81022152 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
0000B4A4 81022160 BALR     05F0        
0000B4A7 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000B501 8101CAEA BALR     05EF        
0000B519 81022160 BALR     05F0        
0000B51C 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000BBE2 8101CAEA BALR     05EF        
0000BC0C 81022148 BALR     05F0        
0000BC0F 81022152 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
0000BE8D 81022160 BALR     05F0        
0000BE90 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000BEED 8101CAEA BALR     05EF        
0000BF32 81022148 BALR     05F0        
0000BF35 81022152 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
0000BF51 81022160 BALR     05F0        
0000BF54 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000BFB1 8101CAEA BALR     05EF        
0000BFED 81022148 BALR     05F0        
0000BFF0 81022152 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
0000C2E1 81022160 BALR     05F0        
0000C2E4 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000C33E 8101CAEA BALR     05EF        
0000C356 81022160 BALR     05F0        
0000C359 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000C3BF 8101CAEA BALR     05EF        
0000C3FB 81022148 BALR     05F0        
0000C3FE 81022152 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
0000C67C 81022160 BALR     05F0        
0000C67F 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000CD40 8101CAEA BALR     05EF        
0000CD6A 81022148 BALR     05F0        
0000CD6D 81022152 LINK     NAME=AIBTDLI  ENTRY=(COBOL) 
0000CFEB 81022160 BALR     05F0        
0000CFEE 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000CFFB 8101CB9A DELETE   NAME=LDDECTBL ENTRY=00000000
GTF trace file DATE=000114 TIME=08514748
詳細トレース オプション
GTFOPT=ALL オプションを使用して、詳細トレースを取得します。

次に、上記のデフォルト トレース例にある BALR (命令カウント CFEB) で開始するコードの最終セクションの詳細トレースの例を示します。このトレースを取得するために、オプション GTFOPT=ALL および GTFIMIN=0000CFEB が使用されました。

GTF option GTFFILE =D:\MFUSER\CONFIG\GTF.LOG                          
GTF option GTFOPT  =ALL                                               
GTF option GTFIMIN =0000CFEB                                          
GTF option GTFIMAX =FFFFFFFF                                          
GTF option GTFAMIN =00000000                                          
GTF option GTFAMAX =FFFFFFFF                                          
GTF trace file DATE=000114 TIME=09370586
INS-CTR  INS-ADDR INS-OP  
0000CFEB 81022160 BALR     05F0        
0000CFEC 81022162 ICM      BF08F00D    
0000CFED 81022166 LA       41F0F00E    
0000CFEE 8102216A SVC      0A27        
0000CFEE 8102216A LINK     NAME=ASMTDLI  ENTRY=(COBOL) 
0000CFEF 8102216C BCR      07FE        
0000CFF0 8101DBFA L        58D0D004    
0000CFF1 8101DBFE L        58E0D00C    
0000CFF2 8101DC02 BCR      07FE        
0000CFF3 8101CAEC L        58E0B092    
0000CFF4 8101CAF0 BCR      07FE        
0000CFF5 8101C864 BAS      4DE0B3B4    
0000CFF6 8101CB7A ST       50E0B092    
0000CFF7 8101CB7E CLC      D501300AB484
0000CFF8 8101CB84 BC       4770B40C    
0000CFF9 8101CB88 L        5860B446    
0000CFFA 8101CB8C BAL      4500B3D2    
0000CFFB 8101CB98 SVC      0A09        
0000CFFB 8101CB9A DELETE   NAME=LDDECTBL ENTRY=00000000
0000CFFC 8101CB9A LTR      12FF        
0000CFFD 8101CB9C BC       4770B412    
0000CFFE 8101CBA0 L        5810B4B6    
0000CFFF 8101CBA4 L        5890B4BE    
0000D000 8101CBA8 L        5860B442    
0000D001 8101CBAC LR       1809        
0000D002 8101CBAE LH       48F0B3EE    
0000D003 8101CBB2 BC       47000003    
0000D004 8101CBB6 SVC      0A78        
0000D004 8101CBB8 FREEMAIN  LOC=  00010EC8 LEN=  00000359
0000D005 8101CBB8 LTR      12FF        
0000D006 8101CBBA BC       4770B412    
0000D007 8101CBBE L        5810B4D6    
0000D008 8101CBC2 LH       48F0B4D2    
0000D009 8101CBC6 LA       4120B49A    
0000D00A 8101CBCA LH       4830B482    
0000D00B 8101CBCE SR       1B55        
0000D00C 8101CBD0 MVCL     0E24        
0000D00D 8101CBD2 L        58E0B092    
0000D00E 8101CBD6 BCR      07FE        
0000D00F 8101C868 L        58D0B04E    
0000D010 8101C86C ST       50FD0010    
0000D011 8101C870 LM       98ECD00C    
0000D012 8101C874 BCR      07FE        
0000D013 80000860 SVC      0A00        
GTF trace file DATE=000114 TIME=09375776
プログラム割り込み情報
ここでは、スペースを含むパック 10 進数フィールドに 1 を追加するプログラムのトレース ファイルを示します。PSW には、メインフレームで発生する MVS 異常終了 0C7 に相当する割り込みコード 7 が含まれています。
GTF option GTFFILE =GTF.LOG                                           
GTF option GTFOPT  =ALL                                               
GTF option GTFIMIN =00000000                                          
GTF option GTFIMAX =FFFFFFFF                                          
GTF option GTFAMIN =00000000                                          
GTF option GTFAMAX =FFFFFFFF                                          
GTF trace file DATE=000114 TIME=10565281
INS-CTR  INS-ADDR INS-OP  
00000001 81007FE8 BALR     05C0        
00000002 81007FEA LA       41100002    
00000003 81007FEE AP       FA10C00CC00E
 R0-R7 00000000 00000002 00000000 00000000 00000000 00000000 00000000 00000000 
 R9-RF 00000000 00000000 00000000 00000000 81007FEA 00002870 00000860 01007FE8 
00000003 81007FF4 PGMCHK   PSW=0000000781007FF4
GTF trace file DATE=000114 TIME=10565286