10.4 Common errors

このセクションではよく出るエラーメッセージを解説します。

filename: no such file or directory

filename が実行可能なバイトコードファイルの名前ならば、これはそのファイルが存在しないか、ocamlrun バイトコードインタプリタの起動に失敗したことを意味します。後者の場合は、Objective Caml がシステムにきちんとインストールできていない可能性があります。

Cannot exec ocamlrun

(実行可能なバイトコードファイルを起動したとき) ocamlrun が実行可能パスから見つかりませんでした。Objective Caml がシステムにきちんとインストールされているかチェックしてください。

Cannot find the bytecode file

ocamlrun が実行しようとしたファイル (オプションを除いて最初の引数のファイル名) が見つからなかったか、不正な実行可能バイトコード実行ファイルでした。

Truncated bytecode file

ocamlrun が実行しようとしたファイルは不正な実行可能バイトコード実行ファイルでした。おそらく作成後に何かあって壊れてしまっています。消して再度生成し直してください。

Uncaught exception

実行していたファイルが「迷子」の例外を発生しました。つまり、どこかで発生した例外がどこにもキャッチされませんでした。例外の名前が表示されます。例外の引数が文字列か整数ならそれも表示します (それより複雑な型の引数は正常に表示されません) 。キャッチされない例外の位置を特定するためには、プログラムを -g オプション付きでコンパイルして、ocamldebug デバッガで再度実行するか (16 章を見てください) 、ocamlrun -b で実行するか、環境変数 OCAMLRUNPARAM に b=1 をセットして実行するかしてください。

Out of memory

実行していたプログラムが利用可能量を超えたメモリを要求しました。プログラムが非常に大きなデータ構造を構築したか、関数呼び出しをネストしすぎてスタックオーバーフローしたかです。プログラムに間違いはなく、単にマシンにあるメモリより多くのメモリを要求しただけの場合もありますが、停止しない再帰呼び出しや、非常に大きな配列や文字列の確保、無限リストなどのデータ構造の構築などなど、プログラムに間違いがある場合もあります。

このエラーの原因を突き止めるためには、ocamlrun を -v オプション付きで実行してください (または環境変数 OCAMLRUNPARAM に v=63 をセットして) 。''Growing stack...'' メッセージが大量に表示されていたら、再帰関数がループしている可能性があります。''Growing heap...'' メッセージが大量に表示されていて、ヒープサイズがゆっくり増えていたら、セルの数が多すぎる (無限に多い?) データ構造を構築しようとしている可能性があります。''Growing heap...'' メッセージが大量に表示されていて、ヒープサイズがどんどん増えていたら、非常に大きな配列や文字列を確保しようとしている可能性があります。