OCamlで書かれたコンパイラを書いています。場合によっては実行エラーが発生するとエラーの行が表示されますが、どのように関数が呼び出されるかなどのコンテキストは表示されません。OCamlプログラムのエラーを追跡するには?
デバッグを助けるために関連する変数の実際の値との誤差まで実行のステップを示す方法を誰もが知っていますか?
ところで、私はEmacsをエディタとして使用しています。
OCamlで書かれたコンパイラを書いています。場合によっては実行エラーが発生するとエラーの行が表示されますが、どのように関数が呼び出されるかなどのコンテキストは表示されません。OCamlプログラムのエラーを追跡するには?
デバッグを助けるために関連する変数の実際の値との誤差まで実行のステップを示す方法を誰もが知っていますか?
ところで、私はEmacsをエディタとして使用しています。
Ocamlがコンパイルされます。実行時システムが完全なプログラムのソースコードにアクセスできるように、あなたは翻訳された言語に慣れているようです。コンパイルされたプログラムでは、実行時システムは多くの情報にアクセスできません。たとえば、コンパイル時に変数名が消え、通常のプログラム実行に必要な場合を除いて、すべての関数に渡される引数を追跡するものはありません(オーバーヘッドが大きくなります)。
デバッグシンボル(コンパイラに-g
オプションを渡す)でプログラムをコンパイルすると、プログラムが検出されずに例外が発生した場合にスタックトレースを取得できます。関数名といくつかのプログラムの場所を取得しますが、詳細なメモリの内容は取得しません。デバッグ情報を使用してコンパイルすると実行可能ファイルは大きくなりますが、実行時のパフォーマンスは変わりません。プログラムを実行するときにb
を含むようにOCAMLRUNPARAM
environment variableを設定する必要があります。
ocamlc -g -o foo foo.ml
export OCAMLRUNPARAM=b
./foo
さらに詳しい情報が必要な場合は、デバッガ内でプログラムを実行する必要があります。
このリンクDebugging in Ocaml はあなたの質問にお答えします。
ありがとうございます、それは動作します。デフォルトで 'OCAMLRUNPARAM'の値が分かっているので、時折戻すことができますか? – SoftTimur
@SoftTimur:あなたが求めているのかどうかは分かりませんが、 'OCAMLRUNPARAM'のデフォルト値は空です(特別なことは何もしません)。 – Gilles
OK ...ありがとうございました...私はちょうどEmacsでトレースバックに関する別のスレッドを作成しました:[traceback](http://stackoverflow.com/questions/6397571/how-to-realize-error-traceback-in-emacs) – SoftTimur