10.4 よくあるエラー

本節ではもっともよく遭遇するエラーメッセージについて説明します。

filename: no such file or directory

filename が実行可能なバイトコードファイルの名前である場合、そのファイルが存在しないか、バイトコードインタプリタ ocamlrun 自体を実行できなかったことを意味します。 後者の場合は、 Objective Caml がシステムに正しくインストールできていない可能性があります。

Cannot exec ocamlrun

(実行可能バイトコードファイルを起動した場合) ocamlrun が実行可能パスに見つかりませんでした。 Objective Caml がシステムに正しくインストールされているか確認してください。

Cannot find the bytecode file

ocamlrun の実行しようとしたファイル(ocamlrun にオプション以外の最初の引数として渡されたファイル)が存在しないか、妥当な実行可能バイトコードファイルではありません。

Truncated bytecode file

ocamlrun の実行しようとしたファイルが妥当な実行可能バイトコードファイルではありませんでした。 恐らくは作成後に切り詰められたか壊れたのでしょう。 ファイルを消してビルドしなおしてください。

Uncaught exception

実行中のプログラムに「迷子」の例外がありました。 すなわち、例外が発生したものの、どこでも捕捉されませんでした。 この場合、プログラムはただちに終了します。 例外の名前を表示し、それに続いて整数や文字列の引数を表示します(より複雑な型の引数は正しく表示されません)。 捕捉されなかった例外がどの文脈で発生したか特定するには、プログラムを -g オプション付きでコンパイルし、ocamldebug 内で実行するか( 16 章「デバッガ(ocamldebug 参照)、 ocamlrun -b で実行するか、環境変数 OCAMLRUNPARAMb=1 を設定して再実行してください。

Out of memory

実行中のプログラムが利用可能な量より多くのメモリを要求しました。 これは、プログラムが過度に巨大なデータ構造を作成したか、プログラムに非常に深い関数呼び出しがありスタックオーバーフローを起こしたかのいずれかです。 プログラムは完全に正しいのですが、計算機に搭載されているのより多くのメモリを要求している場合もあります。 それ以外に「Out of memory」メッセージがプログラムのエラーを表している場合もあります。 例えば、停止しない再帰関数、巨大な配列や文字列を割り当てようとした、無限リストや他の無限データ構造を作成しようとした……などがあります。

このエラーについて診断するには、 ocamlrun-v オプションを与えるか、環境変数 OCAMLRUNv=63 を設定してプログラムを実行してみるとヒントが得られるかもしれません。 "Growing stack ..." というメッセージが非常に多く表示されている場合には、再帰関数のループの可能性があります。 "Growing heap ..." というメッセージが沢山表示されている場合には、非常に多くの(無限といってもよいほど多くの?)セルを使うデータ構造か構築しようとしている可能性があります。 "Growing heap ..." の表示は少ないながらヒープのサイズが大きく増加している場合には、巨大な配列や文字列を作成しようとしている可能性があります。