私は最近、あるOpenVOSの顧客のために明らかなコンパイラの問題を診断しました。彼はOpenVOS Release 17.1を実行している2つのモジュールを持っています。彼はそのうちの1つでプログラムをうまくコンパイルすることができましたが、もう1つのモジュールでコンパイルしようとしたときにgccコンパイラが「内部コンパイラエラー」と診断しました。ここで問題を複製しようとしたが、再現できなかった。そこで、コンパイラの問題というよりも、モジュール固有の問題なのではないかと考えました。最初は、OpenVOS Release 17.1で行ったデフォルトのコマンド制限値の変更が原因ではないかと思っていました。 リリース17.1では、gccやgmakeを含む多くのプログラムが、コマンド制限値を一貫した値に設定していなかったり、無限大の値に設定していなかったりすると失敗するようになりました。しかし、このお客様はmodule_start_up.cmのサンプルのset_default_cmd_limitsコマンドをコメントアウトしていたので、すでに今回のリリースで推奨している無限値を使っていました。次に、コンパイラエラーが発生した時のsyserr_logを見てもらいました。案の定、彼のモジュールがページングスペースを使い果たしたことを示すメッセージを見つけました。アドレス空間の制限が使用を制限していなかったにもかかわらず、十分なページング空間を持っていなかったため、オペレーティングシステムは追加の仮想メモリを要求しないようにするしかありませんでした。このため gcc でアドレッシング例外が発生し、不明瞭なエラーメッセージが表示されるようになりました。このディスクの1つに新しいページングファイルを作成すると、彼は巨大なソースプログラムを構築することができました。
この話の教訓は、奇妙なエラー(見たことのないエラーや理解できないエラー)が発生したとき、OpenVOS が何かメッセージを記録していないかどうかを確認するために、syserr ログを見てみることが決して損ではないということです。このケースでは、彼の syserr ログには、ページングスペースの枯渇の進行状況を追跡する一連のメッセージが含まれていました。エラーが再現可能だったので、接続は非常に明白でした。
syserr_logのメッセージについて質問がある場合は、OpenVOSフォーラムに投稿するか、最寄りのカスタマーアシスタンスセンターに連絡することができます。