(progn
(print 11)
(/ 1 0)
(print 22)
(/ 2 0)
(print 33))
当我在该表达式上按C-M-x时,Emacs在(/ 1 0)失败时调用调试器。当我按c继续而不是q退出时,调试器仍然退出而不执行(print 22)或(/ 2 0)。这里唯一的区别是c退出并带有消息
progn: Arithmetic error
什么是示例代码,其中c和q有很大的不同,何时应该键入c而不是q?
答案 0 :(得分:2)
可以在任何不会停止执行的代码中显示差异,即不包含错误(例如,在debug
调用时)。
答案 1 :(得分:2)
使用debug-on-signal
时,最容易看出差异。使用此设置,在发出错误信号时调用调试器,即使该错误由封闭的condition-case
处理。在这种情况下c
将继续正常执行(即发出错误信号,这反过来导致处理程序代码运行,然后可以继续正常执行)。
答案 2 :(得分:0)
起初我觉得这个问题非常明显,
但在尝试建立一个例子之后,我实际上不得不查看info
。
因此,让我总结一下我为自己澄清的内容:
edebug
中的 c 与gdb
中的 c 不同。
这个在每个断点处停止一秒钟并最终退出。
我现在还没有看到它对任何人都有用。
等价的是 g :这个将持续到下一个断点
并停在那里。
这是一个代码示例:
(defun foo ()
(setq x (loop for i from 1 to 100
collecting (* i i)))
(setq y (nth 5 x))
(incf y))
(foo)
致edebug
:
*scratch*
foo
和 C-u C-M-x 内移动点(调用edebug-defun
)y
中的setq y
和 M-x edebug-set-breakpoint (foo)
和 C-j edebug
。在这里,您可以使用快捷键 b 执行第3步
而不是 M-x ... 答案 3 :(得分:0)
另一个区别在于递归编辑。例如,我可以调用query-replace,然后输入递归编辑,然后键入(/ 1 0)
并对其进行评估以进入调试器。现在,如果我按q,我们将返回顶级并且不再运行查询替换。但是如果我按c而不是,我仍然在递归编辑中。
更新另一个区别。在调试器中,c
绑定到debugger-continue
,exit-recursive-edit
是q
的包装器
和top-level
绑定到exit-recursive-edit
。这意味着已知有top-level
与(defun simple-rec ()
(forward-word 1)
(message "111")
(debug)
(message "222")
(forward-word 1))
相关的任何差异。有关差异,请参阅Recursive Edit - Emacs Manual。
以下是根据Recursive Editing - Emacs Lisp Manual中的示例改编的示例来测试差异。
{{1}}