PL/I プログラムをデバッグするときは、以下に示すエラー処理の概念を十分に理解しておく必要があります。条件処理の詳細については、「PL/I 言語解説書」を参照してください。
オペレーティング・システムには、エラー処理機能があります。さまざまな状態でマシン割り込みが発生し、システム監視プログラムに入る可能性があります。PL/I 制御プログラムは、指定されたルーチンを使って、このような割り込みの後に行われる処置を定義できます。あるいは PL/I 制御プログラムは、PL/I プログラマーが指定した ON ユニットに制御を渡します。
PL/I 言語およびその実行環境は、オペレーティング・システムが提供するエラー処理機能をさらに拡張します。PL/I の割り込みが発生する状態は多数あり、中には、エラー処理ではなく通常のプログラム・フローの制御として状態が使用される場合もあります (ENDFILE など)。ON ユニットは、ほとんどの割り込みの後で制御を受け取ることができます。
ON ユニットが割り込み後に制御を受け取るように記述しない場合、以下の処理が可能です。
ほとんどの PL/I 条件は、プログラム・ロジックまたは提供されたデータの中にエラーがあるために発生します。ただし、エラーとは関連がない場合もあります。このような条件として ENDFILE などがありますが、これらはプログラム実行中いつでも発生する可能性があるので、予測することは困難です。
PL/I には、システム・メッセージと SNAP メッセージの両方があります。
From offset xxx in a BEGIN block From offset xxx in procedure xxx From offset xxx in a condition_name ON-unit
これらのメッセージは、メイン・プロシージャーへのトレースバックに必要な回数だけ繰り返されます。
Condition_name condition was raised at offset xxx in procedure xxx.
このメッセージの後続部分は、SNAP SYSTEM メッセージと同様です。
オフセット番号をステートメント番号に変換するには、以下のステップを実行します。
PL/I には、条件処理の組み込み関数と疑似変数があります。これらを使用すれば、割り込みに関連したさまざまなフィールドを検査し、特定のケースでは、エラーを引き起こすフィールドの内容を訂正することができます。
このような組み込み関数には、以下のものがあります。
|
DATAFIELD ONCHAR ONCODE ONCONDCOND ONCONDID |
ONCOUNT ONFILE ONGSOURCE ONKEY ONLOC |
ONSOURCE ONWCHAR ONWSOURCE |
これらの条件処理組み込み関数および疑似変数の詳細については、「PL/I 言語解説書」を参照してください。
非修飾条件の ON ユニットはプログラム中の任意の時点で 1 つしか確立できませんが、修飾条件の ON ユニットは複数確立できます。例えば、異なるファイルについて修飾された ENDFILE 条件を処理する場合は、ON ユニットを確立させて、それらのファイルのいずれかについて ENDFILE の発生を一意的に処理することができます。