PM(Program Monitor)の概要

PMは、TSO/ISPFのコマンド・シェルの基で実行されるプログラムのアクティブ・デバッガーで、TSOのコマンド・プログラムとして動作する。デバッグ対象のプログラムは、PMによって制御されるサブタスクとして実行される。
PMにはプログラムの実行を中断するブレーク機能があり、任意の位置(SVC命令(SVC 202)の埋め込み)もしくはABEND時にプログラムの実行を中断して、内蔵されたSV(Storage Viewer)機能によってその時点のPSWや汎用レジスターおよび実行中プログラムのメモリー内容がISPFパネルで表示させてインタラクティブなデバッグができる。





デバッグ・プログラムの実行(PM Operation)

PMはISPFのコマンドシェル・パネルにて起動する。コマンドPMに続き、デバッグしたいアセンブラー・プログラムのモジュール名を指定する。

起動操作

PM  [オプション]  実行モジュール名  [実行させるプログラムへ渡すパラメーター]

例)
PM IEFBR14 PARM-STRING
は次のJCLと同じである。
//         EXEC PGM=IEFBR14,PARM='PARM-STRING'

PM -LK IEFBR14 AAA,A=(A,B) HDGD 'HSJDHK'
は次のJCLと同じである。
//         EXEC PGM=IEFBR14,PARM=('AAA,A=(A,B) HDGD ''HSJDHK''')

指定された実行モジュールは、TPMLLIB DD文で定義したライブラリー → ISPLLIB DD文で定義したライブラリー → STEPLLIB DD文で定義したライブラリー、の順に探索される。
ISPFおよびLOGONプロシージャのSTEPLIBに定義されていないデータセットに入っているモジュールを実行する場合は、ALLOCATEコマンドで、事前にTPMLLIB DD文をアロケーションしておくこと。TPMLLIBの使用はオプションであるが、アロケートされていれば実行するプログラムのタスクライブラリーとなる。

ALLOC DD(TPMLLIB) DA('dsname') SHR

PMを実行する都度、診断ログのSYSOUTがログオン中のTSOユーザー空間に割り振られて(DD名:SYSnnnnn)出力される。このログには、実行プログラムがどのライブラリーからローディングされたか、終了時の完了コード、実行に要した時間やCPU時間などが表示される。

APIサービス

SVC 200

将来のための予約SVC。

SVC 201

実行するプログラムをSUPモードに切り替える。
APF許可や特権モードを必要とするマクロを使用するような場合に利用できる。プログラム・モジュールをAPF許可ライブラリーに入れておく必要はない。元のPPモードへ戻すにはMODESETマクロを使えばよい。

SVC 202

プログラムの実行をブレークして、ブレークモニター・パネルを表示する。

SVC 203

将来のための予約SVC。







ブレーク・パネルの表示(BM:Break Monitor panel)

PMツールで実行中のプログラムがSVC 202命令を出すかABENDすると、画面がブレーク・パネルに切り替わる。

画面2行目左側にブレークした理由がメッセージ表示される。>>>TSO PROGRAM MONITOR<<であれば、SVC 202命令によるブレーク、>>> PROGRAM ABENDED <<<であれば、プログラムのABENDを示す。表示されているPSWと汎用レジスターの内容はプログラム・ブレーク時もしくはABEND時のものとなる。ABEND時のPSWと汎用レジスターの内容は、SDWAEC1とSDWAGRSV(AT TIME OF ERROR)から持ってきている。ABENDの場合、このパネルはPMによるプログラムABEND処理の過程で表示され、この時点ではプログラムの実行タスクはまだ存在している。
PSWと汎用レジスターに続いて、プログラム実行空間のメモリー内容が表示される。初期表示アドレスは、ブレークもしくはABEND時のPSWが示すアドレスとなる。

ブレーク・パネルでは、SV(Storage Viewer)の機能を使って、ブレークしているプログラムのレジスターやメモリー内容を表示することでインタラクティブ・デバッグができる。CMDフィールドにGOもしくはENDコマンド(PF3キー)を入力することでプログラムの実行を再開できる(SVC 202命令の次の命令から実行が再開される)。ABENDしている場合は、PMによるABEND処理が再開されプログラムはABENDコードで終了する。







アドレス空間内メモリーの表示(ブレーク・パネルの操作、SV:Storage Viewer Operation)

SV(Storage Viewer)は、TSO/ISPF配下で実行される仮想記憶域の表示・変更プログラムである。PMはブレーク・パネルの表示に内蔵されたSVプログラムを呼び出して、仮想空間内のメモリー内容を編集してパネルに表示する。

コマンド(CMD==>フィールドに入力)

空エンター

コマンド行での空エンターは、カレントアドレスを再読込して表示する。(表示内容のリフレッシュ)
カーソルを、ストレージアドレスやデータ上に置いて、ENTERキーを押下した場合、そのアドレス、あるいはデータに対応するアドレスが、カレントアドレスになり、パネルの先頭に表示される。

address

表示したい仮想記憶域のアドレスを16進数で指定する。アドレスは16進数アドレスもしくは間接アドレス表記で指定できる。

PF8(DOWN.)

ストレージ・データのフォワード・スクロールを行う。
カーソルを、ストレージアドレスやデータ上に置いて、PF8キーを押下した場合、そのアドレス、あるいはデータに対応するアドレスが、カレントアドレスになり、パネルの先頭に表示される。(空エンターと同じ)
※カーソルがパネル内のストレージ・データの先頭にある時にPF8キーを押下してもスクロールはされないことに注意。

PF7(UP.)

ストレージ・データのバックワード・スクロールを行う。
カーソルを、ストレージアドレスやデータ上に置いて、PF7キーを押下した場合、そのアドレス、あるいはデータに対応するアドレスが、パネルの最終バイトに位置付くようにスクロールされる。
※カーソルがパネル内のストレージ・データの最後にある時にPF7キーを押下してもスクロールはされないことに注意。

PF5(RFIND.)

文字列またはデータの再検索を行う。

BASE address|*

BASEアドレスを設定する。BASEアドレスが設定された状態を「ベースモード」と呼ぶ。ベースモードでは、パネル上のアドレス表記が、番地から基底アドレス+変位に切り替える。* はカレントアドレスを、基底アドレスに設定することを示す。ベースモードを解除するには、BASE 0 を指定すればよい。
ベースモードでは、addressの入力は、仮想アドレスそのものではなく、BASEアドレスからの変位として扱われる。ベースモードでアドレス100を入力した場合、100番地ではなく、設定済みBASEアドレス+100番地となる。

F|FB  探索文字列

ストレージ上の文字列を探索する。FBコマンドは、バイナリーデータの探索を行う。この場合、パラメーターは16進数で指定する。

N [ote]  名前

カレントアドレスに名前を付ける。名前を付けておけば、後でPOINTコマンドによって、名前で再表示させることができる。

P [oint]  [名前]

NOTEコマンドによって付けられた名前に対応する、ストレージ・データを再表示する。
名前を省略すると、NOTEパネルが表示され、パネル上で再表示箇所を選択することができる。
パネル上の名前フィールドを、空白入力またはErase EOFキーでクリアーすることで、登録済みの名前を削除することができる。

S{1|2|3|4}

カレントアドレスのストレージ・データ(1ワード:4バイト)を記憶する。記憶するための内部レジスターは4つあり、S1、S2、S3、S4で選択する。

B{1|2|3|4}

カレントアドレスのストレージ・データ(1ワード:4バイト)を記憶して、BREAK SVC命令を埋め込む。Bnのnには、1〜4の内部レジスター番号を指定する。
※SnとBnは同じ内部レジスターを使用しているので、nが同じ番号であれば上書きされる。S1コマンドで記憶した後、R1コマンドでリストアーすることなくB1コマンドを使うとS1コマンドで記憶されたアドレスと内容は上書きされてしまう。

R{1|2|3|4}

記憶済みのストレージ・データをリストアする。

AM [newdata]

カレントアドレスのストレージ・データを書き換える。書き込むデータは16進数で指定する。書き込みアドレスの指定はできない。書き込みアドレスを変更したければ、先にそのアドレスを先頭に表示させ、カレントアドレスを変更しておくこと。

SHOW mnemonic

OSのコントロール・ブロックを表示する。表示したいコントロール・ブロックのニーモニックをパラメーターに指定する。SHOW CVT、SHOW JPQ、など。
SHOW JPQはPF6にも割り当ててある。

MAIN

カレント・タスクのメインプログラムの入口点を表示する。

MDLA

カレント・タスクのメインプログラムの先頭アドレス(ローディングアドレス)を表示する。

PF10(RETRIEVE)

コマンド・ヒストリーを行う。(ISPFの機能)

PF1(HELP)

ヘルプ・パネルを表示する。
PMに内蔵されたSVはブレーク・パネル表示用のサブセット版なので、ヘルプに記載されている機能やコマンドの全てが使用できるわけではない。表示するアドレス空間の切替や、ブレーク・モニターの制御に関するコマンドや機能は利用できない。