日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


日本語HP DECprint Supervisor for OpenVMS

日本語HP DECprint Supervisor for OpenVMS
ユーザーズ・ガイド


目次 索引

第17章 デバッグのためのエラー・ハンドラの使用

装置制御ライブラリには,PostScriptプログラムをデバッグするのに役立つエラー・ハンドラが登録されています。エラー・ハンドラは出力の最後のページを印刷するとともに,エラーを特定するための情報も提供します。

17.1 プリント・ジョブへのエラー・ハンドラの組み込み

エラー・ハンドラは通常のプリント・ジョブに自動的に組み込まれるわけではありません(システム管理者がこの省略時の設定を変更した場合を除きます)。したがって,次の方法でエラー・ハンドラを明示的に起動しなければなりません。

$ PRINT /SETUP=LPS$ERRORHANDLER file-name

エラー・ハンドラはPostScriptメッセージを返します。 第 18 章 に説明するように, /PARAMETERS=MESSAGES修飾子を使用すれば,これらのメッセージをファイルまたはプリンタに送信することができます。次の例を参照してください。

$ PRINT /QUEUE=PS40$A10 /PARAMETERS=MESSAGES=KEEP FILE.PS

PostScriptアプリケーションを開発する場合には, 第 13 章 の説明に従って,エラー・ハンドラ・セットアップ・モジュールを含むようにフォームを定義することにより,エラー・ハンドラをより簡単に起動することができます。

17.2 エラー・ハンドラがPostScript環境に与える影響

エラー・ハンドラはユーザ・プログラムで変更された可能性のある定義を使用するのではなく,ディクショナリ systemdict からオペレータを参照します。

場合によっては,エラー・ハンドラがロードされるときに,プログラムが異なる動作を実行する可能性があります。たとえば,PostScriptサーバ・ループ・コンテキストの外部で exit オペレータを実行すると,エラー・ハンドラがロードされていない場合には, invalidexit エラーが発生します。しかし,エラー・ハンドラがロードされている場合には,プログラムは正しく終了し,エラーは発生しません。

17.3 エラー・ハンドラの例

例 17-1 に示すログ・ファイルの例は,次の PostScriptプログラムを対象にしています。

[/1st-level [/2nd-level [/3rd-level [/4th-level 56 ] ] ] (end)] 
/myproc { [ 8 8 ] 0 0 div setdash } def 
100 200 moveto 
myproc 

次のコマンドにはエラー・ハンドラが指定されており,ログ・ファイルが作成されます。

$ PRINT /PARAMETERS=MESSAGES=KEEP /SETUP=LPS$ERRORHANDLER filename

例 17-1 では,プログラムを実行したときにログ・ファイルに追加されるエラー・ハンドラからの出力を示しています。

例 17-1 エラー・ハンドラによって作成されるログ・ファイルの例
ERROR: undefinedresult (1)
OFFENDING COMMAND: div (2)
 
OPERAND STACK:  (3)
 
0 
0 
[ 8 8 ] 
[/1st-level [/2nd-level [/3rd-level  -array- ] ] (end) ] 
 
EXECUTION STACK: (4)
 
{ setdash } 
 
GRAPHICS STATE:  (5)
Current Matrix: [ 4.16667 0.0 0.0 -4.16667 0.0 3298.0 ] 
Color: 0.0 
Current position: x = 100.0, y = 200.0 
Line width: 1.0 
Line cap: 0 
Line join: 0 
Flatness: 1.0 
Miter limit: 10.0 
Dash pattern: [ ] 0.0 

ここに示したサンプル・ファイルの先頭に定義されている配列には,最初の要素としてその配列自体を示すポインタが含まれています。これは3レベルの深さに展開されます。配列の最も内部のバージョンは単に--array--として表現されます。

17.4 エラー・ハンドラからの出力の解読

エラーが発生した場合には,エラー・ハンドラは showpage コマンドを実行し,出力の最後のページを印刷します ( 例 17-1 を参照)。また,次の情報も出力します。

  1. エラーの名前

  2. エラーを生じたPostScriptオペレータ

  3. オペランド・スタックの内容
    エラー・ハンドラはスタックに入っている各オブジェクトの値を表示します。その場合,数値は10進数で表示します。配列のすべての要素,文字列,およびプロシージャは再帰的に表示されます。他のオブジェクトは別の方法で記述されます。たとえば,セーブ・オブジェクトの場合は--savelevel--が表示されます。
    最初に表示される項目はスタックの先頭のオブジェクトです。

  4. 実行スタックの内容
    実行スタックには,実行中のプロシージャの一部が示されています。先頭のオブジェクトは実行されつつあるオペレータとオペランドを含むプロシージャです。 2番目のオブジェクトは呼び出しプロシージャのまだ実行されていない部分です。

  5. グラフィック状態に関する情報:
    現在の変換マトリックス
    カラー(currentgray の値)
    現在の位置
    線幅
    線端の形状
    線の結合部の形状
    平滑さ
    結合部の限度
    破線のパターン

PostScriptコードでエラーを検出した場合には,ファイルを作成したアプリケーションを変更するか,またはアプリケーション・プログラマに問題を通知しなければなりません。

17.5 PostScriptデータの出力形式

PostScriptデータは,通常はPostScriptソース・ファイルに記述されたとおりに表現されますが,エラー・ハンドラがPostScriptデータを特別に表現することもあります。

  • 配列は再帰的に表示されます。したがって,配列内の各要素は,それが別の配列である場合でも,完全に展開されます。配列内の展開は 3レベルまでです。これは,配列の内部にその配列自体を含むような配列を表示するときに,無限の再帰表示を防止するためです。
    配列には実行可能配列と実行不可能配列があります。実行可能配列は中括弧
    ({ })で囲んで表示されるプロシージャであり,実行不可能配列は大括弧 ([ ])で囲んだ複数のオブジェクトとして表示されます。配列を読み込むことができない場合や,深さが3レベルを超える場合には,配列は次のいずれかの方法で表現されます。
    --array-- 通常の配列の場合
    --proc-- 実行可能配列の場合
    --packedarray-- パックされた配列の場合
    --packedproc-- パックされた実行可能配列の場合

  • 論理オブジェクトはその値に応じて,TRUEまたはFALSEによって表現されます。

  • ディクショナリ・オブジェクトは--dictionary--によって表現されます。

  • ファイル・オブジェクトは--filestream--によって表現されます。

  • フォント・オブジェクトは--fontid--によって表現されます。

  • 整数は10進数によって表現されます。

  • マーク・オブジェクトは--mark--によって表現されます。

  • 名前オブジェクトはオブジェクトのリテラル名によって表現され,先頭にリテラル名を示すためのスラッシュが追加されます。

  • ヌル・オブジェクト,たとえば,初期化されない配列の各要素の初期値は--null--によって表現されます。

  • オペレータはオペレータ名によって表現され,先頭に2つのスラッシュが追加されます。

  • 実数オブジェクトは10進数によって表現され,小数点と小数点の後に少なくとも1桁の数字が示されます。

  • セーブ・オブジェクトは--savelevel--によって表現されます。

  • 文字列オブジェクトは括弧で囲んだASCIIテキスト文字列によって表現されます。これは PostScriptファイルに文字列を入力する場合と同じです。

PostScript言語は,エラー・ハンドラでは認識できない新しいデータ・フォーマットを含むように拡張できます。認識できないフォーマットのデータは2つの引用符と認識できないデータ・フォーマットの名前として表現されます。

17.6 エラー発生箇所の判定

PostScriptストリームのどこでエラーが発生したかを正確に判断することは困難であり,不可能な場合もあります。これは,実行スタックがコンテキストをユニークに識別できない可能性があるからです。この場合には,診断情報をPostScriptファイルに追加することができます。たとえば,エラーが showpage 定義に関連しているように思われる場合には,次に示すようにPostScriptコードを変更します。

/myshowpage 
   { 
   (At the top of my showpage\n) print flush 
   % some PostScript code 
   (Just before real showpage call\n) print flush 
   showpage 
   } def 


目次 索引

© 2013 Hewlett-Packard Development Company, L.P.