2011-06-18 3 views
4

私はOcamlにコンパイラを書いています。 tracbackは、私がコンパイルして、たとえば、端末内にmakeでそれをテストする際に適しています:Emacsでのエラートレースバックを実現するには?

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 

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

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のパーツがあります:http://paste.ubuntu.com/628838/

誰がどのように私のを修正することを教えてもらえターミナルのようにトレースバックを表示しますか?ありがとうございました

答えて

6

export OCAMLRUNPARAM=bはどこに書きましたか?

あなたがメイク(↹タブの略)でこれを書いた場合:

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

各メイクファイルコマンドは、別のシェルで実行し、その環境変数の割り当てが後に消えているので、それは動作しません。最初の行が完了します。 Emacsの中からOCamlのプログラムを実行するときは、常にバックトレースをしたい場合は

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

は、あなたの.emacsで環境変数を設定します:

(setenv "OCAMLRUNPARAM" "b") 

では、代わりに、単一の論理行に2行を組み合わせることができますEmacsがbacktraceメッセージを場所のエラーメッセージとして認識させるには、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))) 
+0

確かに、私は= 'MakefileのB'を輸出OCAMLRUNPARAMを書いた...私はそれを修正してきたし、今ではEmacsでもトレースバックを示しています...一つの利点それらをEmacsで使用するには、それらをクリックしてローカライズする必要があります。しかし、これはまだ動作しません、私は再び '.emacs'を修正する必要があると思います、あなたは何か提案がありますか? – SoftTimur

+0

ところで、コンパイル時に私のプログラムに何か問題があった場合、それらをクリックしてローカライズすることができます。例えば、 'File" interp.ml "、行45、文字21-91:'を押すことができます。しかし、まだトレースバックではうまくいきません。 – SoftTimur

+0

@SoftTimur:バックトレースメッセージを認識する方法をEmacsに伝える必要があります。私の編集を参照してください。 – Gilles

関連する問題