Emacs Elisp调试器未弹出

Emacs Elisp调试器未弹出,emacs,elisp,Emacs,Elisp,当我在emacs会话中第一次切换全局调试模式并尝试执行一段无效的lisp时,将弹出回溯窗口。但是,如果我关闭此窗口并删除回溯缓冲区,然后尝试执行另一段无效的elisp,则回溯缓冲区将不再创建,也不会弹出窗口。我已经阅读了手册,试图找出发生这种情况的原因,但没有任何帮助。问题是,杀死*Backtrace*缓冲区实际上并不能使您离开调试器(与点击c或q相反),因此,您仍然处于递归编辑中,其中禁用了进一步调试(以避免进一步跳入调试器) 我建议您使用C-]来摆脱这种情况。但我也建议您将此文件与M-x r

当我在emacs会话中第一次切换全局调试模式并尝试执行一段无效的lisp时,将弹出回溯窗口。但是,如果我关闭此窗口并删除回溯缓冲区,然后尝试执行另一段无效的elisp,则回溯缓冲区将不再创建,也不会弹出窗口。我已经阅读了手册,试图找出发生这种情况的原因,但没有任何帮助。

问题是,杀死
*Backtrace*
缓冲区实际上并不能使您离开调试器(与点击
c
q
相反),因此,您仍然处于递归编辑中,其中禁用了进一步调试(以避免进一步跳入调试器)


我建议您使用
C-]
来摆脱这种情况。但我也建议您将此文件与
M-x report emacs bug
一起归档,因为当回溯缓冲区被终止时退出调试器是有意义的。

也许您仍然处于
递归编辑中,这通常在模式行中被
[
]
看到。您需要退出
递归编辑
,然后
*回溯*
缓冲区才会重新出现。评估
(顶级)
将起作用,并且有其他方法可以正确退出调试器。谢谢!这确实是问题所在。我必须仔细阅读递归编辑。当我杀死缓冲区而不是按q键时会发生这种情况,因此我假设键本地绑定到的函数退出递归编辑。要查看
调试器模式映射中的键,可以在点位于
*Backtrace*
缓冲区时键入
M-x descripe mode RET
。或者,您可以通过键入
M-x descripe variable RET debugger mode map RET
随时查看它。在这个特定的实例中,
q
被绑定到
top-level
。函数
exit recursive edit
只是从一个级别中退出——可能有许多级别处于活动状态。函数
abort recursive edit
将退出所有级别。函数
顶层
有一个文档字符串,该字符串表示:“退出所有递归编辑级别。这也会退出所有活动的迷你缓冲区。”+1。另外:(1)如果当前递归编辑是回溯缓冲区,则可以使用
C-x4 b*backtrace*
访问它。(2)
M-x顶级
将带您进入顶级,退出所有级别的递归编辑。