2012-01-27 8 views
2

私はEmacsでOCamlを書いています。私は既にMeta-x compilemake -kがハイパーリンクで警告を出すようにEmacsを設定しました。しかしfailwithによって発生するエラーのために、それは、例えば、ハイパーリンクを与えることができない。Emacsで "failwith"エラーを追跡するには?

analyzing (ZONE)... 
Fatal error: exception Failure("to do") 
Raised at file "pervasives.ml", line 22, characters 22-33 
Called from file "list.ml", line 69, characters 12-15 
make: *** [all] Error 2 

Compilation exited abnormally with code 2 at Fri Jan 27 18:44:10 

を私は私のコードでfailwith "to do"多くを持っている、とエラーが発生した1知っている必要があり、誰もがEmacsが見つけてみましょうする方法を知っていませんこの種のエラー?

答えて

3

コンパイルメジャーモードでOCamlバックトレースレポートを解析する方法を知るために、いくつかのelispを.emacsに追加するには、following bug reportを参照してください。ここで

が示唆されたコード(プラストゥアレグモードフック)である:

(defun caml-change-error-alist-for-backtraces() 
    "Hook to change the compilation-error-regexp-alist variable, to 
    search the ocaml backtraces for error locations" 
    (interactive) 
    (progn 
    (setq compilation-error-regexp-alist-alist 
      (append 
      '((caml-backtrace 
"^ *\\(?:Raised at\\|Called from\\) file \\(\"?\\)\\([^,\" \n\t<>]+\\)\\1,\ 
lines? \\([0-9]+\\)-?\\([0-9]+\\)?\\(?:$\\|,\ 
\\(?: characters? \\([0-9]+\\)-?\\([0-9]+\\)?:?\\)?\\)" 
       2 (3 . 4) (5 . 6))) 
      compilation-error-regexp-alist-alist)) 
    (setq compilation-error-regexp-alist 
      (append compilation-error-regexp-alist '(caml-backtrace))))) 

(add-hook 'caml-mode-hook 'caml-change-error-alist-for-backtraces) 
(add-hook 'tuareg-mode-hook 'caml-change-error-alist-for-backtraces) 


(defun caml-change-error-alist-for-assert-failure() 
    "Hook to change the compilation-error-regexp-alist variable, to 
    search the assert failure messages for error locations" 
    (interactive) 
    (progn 
    (setq compilation-error-regexp-alist-alist 
      (append 
      '((caml-assert-failure 
       "Assert_failure(\"\\([^,\" \n\t<>]+\\)\", \\([0-9]+\\), \\([0-9]+\\))" 
       1 2 3)) 
      compilation-error-regexp-alist-alist)) 
    (setq compilation-error-regexp-alist 
      (append compilation-error-regexp-alist '(caml-assert-failure))))) 

(add-hook 'caml-mode-hook 'caml-change-error-alist-for-assert-failure) 
(add-hook 'tuareg-mode-hook 'caml-change-error-alist-for-assert-failure) 
2

バイトコードにコンパイルすると、より正確なスタックトレースが得られることがあります。

  1. はバイトコードに
  2. コンパイルをあなたは-gオプションを指定してコンパイルしていることを確認します(またはocamlbuildでdebugタグを使用)、スタックトレースは、より正確です。
  3. $OCAMLRUNPARAMbオプションが設定されていることを確認してください(hereを参照)

M-x next-error意志あなたは(あなたが分布からcaml-modeを使用する場合と、少なくともOCamlの3.11)スタックトレースを追跡することができます。

+0

本当に? 'M-x next-error'はスタックトレースでは動作しません。 – Thomas

+0

はい。配布物から 'caml-mode'を使用し、少なくともOCaml 3.11を使用するとします。 [here](http://caml.inria.fr/mantis/view.php?id=4628)を参照してください。 –

関連する問題