在adoc-mode中调试emacs冻结

rev*_*olt 6 emacs elisp

我在emacs(adoc-mode)中使用Asciidoc工作了很多.我相信它在编辑内联源代码时会出现错误.发生的事情是emacs冻结,CPU消耗达到100%.我可以轻松地重现这种行为.

我如何实际确定哪些脚本导致emacs像那样挂起?并且最好产生回溯?

由于emacs 在缓冲区中键入时冻结,而不是在执行命令后,类似toggle-debug-on-quitdebug-on-entry无用的东西 .

我想我可能标志着每一个defunadoc-mode.elprintfS,但我希望有一个更简单的方法:)

编辑: 所以,我最终grepping了我~/.emacs.d/lisp的所有defuns和trace-function每一个.我能够缩小问题并创建一个小测试用例.

这3个文件是必需的:

$ find /home/victor/.emacs.d/
/home/victor/.emacs.d/
/home/victor/.emacs.d/lisp
/home/victor/.emacs.d/lisp/doc-mode.el
/home/victor/.emacs.d/lisp/adoc-mode.el
/home/victor/.emacs.d/lisp/markup-faces.el
Run Code Online (Sandbox Code Playgroud)

我的.emacs:

$ cat .emacs
(setq inhibit-startup-message t)
(add-to-list 'load-path "~/.emacs.d/lisp/")
(require 'adoc-mode)
(switch-to-buffer (find-file "test.doc"))
(adoc-mode)
(goto-char 29)
(delete-backward-char 5)
;; now (adoc-kwf-attriblist) is in endless loop!!
Run Code Online (Sandbox Code Playgroud)

测试用例是(elisp删除单词"shell"):

$ cat test.doc 
blah blah blah
[source,shell]
foo
bar
Run Code Online (Sandbox Code Playgroud)

现在,运行emacs它会挂起(adoc-kwf-attriblist).我对emacs编程知之甚少,但看起来这件事最终并没有将这一点转移到end位置.

 (goto-char (or (text-property-not-all (point) end 'adoc-attribute-list nil)
             end))
Run Code Online (Sandbox Code Playgroud)

小智 1

如果您可以识别到达循环程序的序列中的函数,则 debug-on-entry 可能会有所帮助。

您尝试过“apropos”“调试”吗?

不确定信号调试或退出调试。如果使用 Unix“kill”或 Windows 任务管理器“结束任务”向 emacs 发送信号,您可以使用 debug-on-signal 拦截它。

并在https://groups.google.com/forum/#!forum/gnu.emacs.help中搜索“调试循环”

另外,您可以使用 edebug-defun 在 adoc-mode.el“debug”中编译一些函数。

(我希望我没有混淆这个话题。我是新来的,不熟悉“回答”与“评论”。)