【问题标题】:Racket: Lack of debug message coming from Emacs with GeiserRacket:缺少来自 Emacs 和 Geiser 的调试消息
【发布时间】:2014-07-22 00:25:49
【问题描述】:

我是使用 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 中的错误消息?

【问题讨论】:

    标签: emacs racket read-eval-print-loop geiser


    【解决方案1】:

    如果我错了,请纠正我,但您的特定问题似乎是 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 无错误:

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

    geiser-compile-file 错误:

    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 没有错误:

    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:

    (mcons 3 (mcons 4 '()))
    

    如您所见,所有这些输出看起来都非常相似。但是,为了回答您的问题,我认为 geiser-compile-file 是在这里使用的最佳 Geiser 选项,因为它提供的有关错误的信息比 Geiser REPL 输出略多。此外,geiser-compile-file 缓冲区默认为geiser-debug-mode,因此这可能有助于调试。最后,您可能还想查看this section on the Geiser site.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 2013-11-28
      • 2012-05-27
      • 1970-01-01
      • 2015-07-21
      • 2019-02-06
      相关资源
      最近更新 更多