Emacs 如何调试LispBox中的LISP编译器错误?

Emacs 如何调试LispBox中的LISP编译器错误?,emacs,lisp,common-lisp,slime,lisp-in-a-box,Emacs,Lisp,Common Lisp,Slime,Lisp In A Box,我已经在Windows上安装了LispBox,它运行得很好。然而,我在调试代码时确实遇到了一些麻烦:当我尝试编译代码时,它包含一个错误,例如语法错误,下面打印的错误消息输出不是很有用 在编译过程中遇到严重错误 "d:/Jervis/Documents/Programming/LISP/hw1.lisp" [Condition of type SIMPLE-ERROR] 0: (CCL::%COMPILE-FILE "d:/Jervis/Documents/

我已经在Windows上安装了LispBox,它运行得很好。然而,我在调试代码时确实遇到了一些麻烦:当我尝试编译代码时,它包含一个错误,例如语法错误,下面打印的错误消息输出不是很有用

在编译过程中遇到严重错误

"d:/Jervis/Documents/Programming/LISP/hw1.lisp"
   [Condition of type SIMPLE-ERROR]
  0: (CCL::%COMPILE-FILE "d:/Jervis/Documents/Programming/LISP/hw1.lisp" "d:/Jervis/Documents/Programming/LISP/hw1.wx64fsl" T NIL T T NIL T :DEFER NIL #<BACKEND WIN64 #x21001C6FCD> :DEFAULT NIL 0)
  1: (COMPILE-FILE #P"d:/Jervis/Documents/Programming/LISP/hw1.lisp" :OUTPUT-FILE #P"d:/Jervis/Documents/Programming/LISP/hw1.wx64fsl" :VERBOSE T :PRINT NIL :LOAD NIL :FEATURES NIL :TARGET :WIN64 :SAVE-LOC..
  2: (SWANK-BACKEND:CALL-WITH-COMPILATION-HOOKS #<CCL:COMPILED-LEXICAL-CLOSURE (:INTERNAL SWANK-BACKEND:SWANK-COMPILE-FILE) #x2100C2730F>)
  3: ((:INTERNAL SWANK:COMPILE-FILE-FOR-EMACS))
有人知道如何获取导致编译错误的代码行号吗? 我曾尝试按照打开编译器输入缓冲区的建议进行操作,但没有成功。缓冲区不可用,因此无法打开


有什么想法吗?

首先澄清一下:您提到的*编译器输入*缓冲区与常见的Lisp和Slime无关,它是关于Emacs在编译Emacs Lisp及其内部Lisp时遇到的错误,与CL完全不同

至于确定文件名/行号以缩小问题范围的问题:当我在文件中输入一段断开的代码时,请说test.lisp:

,然后尝试通过Slime将其发送到CCL,方法是在test.lisp缓冲区中按C-C-k,我得到一个错误和一个重启列表,在重启列表下面还有一个类似于您得到的回溯。通过按0选择restart 0,然后选择“n”以不将损坏的编译文件加载到CCL中。出现错误的缓冲区应替换为名为*slime compilation*的缓冲区,在我的示例中,该缓冲区包含:

cd d:/tmp/lispbox-0.7/
2 compiler notes:

test.lisp:2:5:
  warning: Extra arguments in (IF (= 0 N) 1 ! (* N (FACTO (1- N)))) don't match lambda list (CCL::TEST CCL:TRUE &OPTIONAL CCL:FALSE).
  style-warning: Unused lexical variable N

Compilation failed.
,看起来这正是你想要的


我手动安装的Linux CL安装程序不需要选择0重新启动,而且还可以避免“无论如何加载fasl文件y/n”提示,因此通过一些定制,体验会更好。

首先需要澄清:您提到的*编译器输入*缓冲区与Common Lisp和Slime无关,这是关于Emacs在编译Emacs Lisp及其内部Lisp时遇到的错误,与CL完全不同

至于确定文件名/行号以缩小问题范围的问题:当我在文件中输入一段断开的代码时,请说test.lisp:

,然后尝试通过Slime将其发送到CCL,方法是在test.lisp缓冲区中按C-C-k,我得到一个错误和一个重启列表,在重启列表下面还有一个类似于您得到的回溯。通过按0选择restart 0,然后选择“n”以不将损坏的编译文件加载到CCL中。出现错误的缓冲区应替换为名为*slime compilation*的缓冲区,在我的示例中,该缓冲区包含:

cd d:/tmp/lispbox-0.7/
2 compiler notes:

test.lisp:2:5:
  warning: Extra arguments in (IF (= 0 N) 1 ! (* N (FACTO (1- N)))) don't match lambda list (CCL::TEST CCL:TRUE &OPTIONAL CCL:FALSE).
  style-warning: Unused lexical variable N

Compilation failed.
,看起来这正是你想要的

我手工安装的LinuxCL安装程序不需要选择0重新启动,而且还可以避免“无论如何加载fasl文件y/n”提示,因此通过一些定制,体验会更好