错误:缺少来自Emacs的调试信息



我是emacs和geiser的新手。目前,我对它的常规操作没有任何问题,例如编译程序或启动REPL。但我不知道为什么在Geiser中的REPL只提供非常有限的信息,如果我的程序出错。

例如,我使用一个可变列表,但意外地使用assoc而不是massoc, Geiser中来自REPL的错误消息是

install-deriv-package: undefined;
cannot reference undefined identifier
  context...:
   /Applications/Racket v6.0.1/collects/racket/private/misc.rkt:87:7

然而,在DrRacket的REPL中,错误消息会更有启启性:

assoc: not a proper list: (mcons (mcons 'deriv (mcons (mcons '** #<procedure:deriv-
exponential>) (mcons (mcons '* #<procedure:deriv-product>) (mcons (mcons '+ #
<procedure:deriv-sum>) '())))) '())

对于前者,我甚至不知道错误在哪里。

是否与Geiser的构型有关?如果是这样,我怎么能使错误信息类似于一个在DrRacket?

如果我错了请纠正我,但您的特定问题似乎是install-deriv-package在您的Geiser环境中未定义的问题,但在您的DrRacket环境中未定义。在任何情况下,在我看来,在Geiser REPL, geiser-compile-file输出和DrRacket输出中生成的消息非常相似(至少在可变列表上使用assoc而不是massoc的情况下):

Geiser REPL错误:

racket@> (assoc 3 (mlist (mlist 1 2) (mlist 3 4) (mlist 5 6)))
assoc: not a proper list: (mcons (mcons 1 (mcons 2)) (mcons (mcons 3 (mcons 4)) (mcons (mcons 5 (mcons 6)))))
  context...:
   /Applications/Racket v6.5/collects/racket/private/misc.rkt:87:7

Geiser REPL w/out error:

racket@> (massoc 3 (mlist (mlist 1 2) (mlist 3 4) (mlist 5 6)))
(mcons 3 (mcons 4 '()))

geiser-compile-file error:

Compiling ~/development/lisp/racket/error_testing.rkt ...

Error: struct:exn:fail:contract <- THIS TEXT IS ACTUALLY LINKED TO THE GEISER DOCS PAGE
assoc: not a proper list: (mcons (mcons 1 (mcons 2)) (mcons (mcons 3 (mcons 4)) (mcons (mcons 5 (mcons 6)))))

geiser-compile-file w/out错误:

Compiling ~/development/lisp/racket/error_testing.rkt ...

(mcons 3 (mcons 4 '()))

DrRacket错误:

(assoc 3 (mlist (mlist 1 2) (mlist 3 4) (mlist 5 6)))
. . assoc: not a proper list: (mcons (mcons 1 (mcons 2 '())) (mcons (mcons 3 (mcons 4 '())) (mcons (mcons 5 (mcons 6 '())) '())))

DrRacket w/out error:

(mcons 3 (mcons 4 '()))

如您所见,所有这些输出看起来相当相似。然而,为了回答你的问题,我认为geiser-compile-file是这里使用的最好的Geiser选项,因为它提供了比Geiser REPL输出更多的错误信息。此外,geiser-compile-file缓冲区默认为geiser-debug-mode,因此这可能对调试有所帮助。最后,您可能还想查看Geiser网站上的这一部分。

最新更新