4

Ocamlでコンパイラを書いています。makeたとえば、ターミナルでコンパイルしてテストすると、トラックバックはうまく機能します。

export OCAMLRUNPARAM=b
./Simpler-Basic test.sib
Fatal error: exception Match_failure("interp.ml", 45, 21)
Called from file "interp.ml", line 97, characters 72-86
Called from file "list.ml", line 74, characters 24-34
Called from file "interp.ml", line 108, characters 9-35
Called from file "main.ml", line 54, characters 4-17
make: *** [all] Error 2

しかし、Emacs で をコンパイルしてテストすると、バッファにトレースバック部分が表示Meta-x compileされmakeません。

make
export OCAMLRUNPARAM=b
./Simpler-Basic test.sib
Fatal error: exception Match_failure("interp.ml", 45, 21)
make: *** [all] Error 2

Compilation exited abnormally with code 2 at Sat Jun 18 19:03:04

.emacs友人からコピーした to do トレースバックの一部があります: http://paste.ubuntu.com/628838/

.emacs端末のようにトレースバックを表示するように私の修正方法を教えてもらえますか? どうもありがとうございました

4

1 に答える 1

6

どこに書いたのexport OCAMLRUNPARAM=b

これを makefile に記述した場合 (↹ はタブを表します):

↹export OCAMLRUNPARAM=b
↹./Simpler-Basic test.sib

各makefileコマンドが個別のシェルで実行されるため、機能しません。そのため、最初の行が完了すると、環境変数の割り当てが消えます。代わりに、2 つの行を 1 つの論理行に結合できます。

↹export OCAMLRUNPARAM=b; \
↹./Simpler-Basic test.sib

Emacs 内から Ocaml プログラムを実行するときに常にバックトレースが必要な場合は、次のように環境変数を設定します.emacs

(setenv "OCAMLRUNPARAM" "b")

Emacs がバックトレース メッセージを場所付きのエラー メッセージとして認識するためには、それらを に登録する必要がありますcompilation-regexp-alist。あなたの.emacs(テストされていない)に次のようなものを入れてください:

(eval-after-load "caml"
  (add-to-list 'compilation-regexp-alist
               '("\\(^Raised at\\|Called from\\) file \"\\([^"\n]+\\)\", line \\([0-9]+\\)"
                 2 3)))
于 2011-06-18T17:44:42.213 に答える