【问题标题】:debugging emacs freezing in adoc-mode在 adoc 模式下调试 emacs 冻结
【发布时间】:2014-02-14 19:08:57
【问题描述】:

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

我如何真正确定是什么脚本导致 emacs 那样挂起?最好产生一个回溯?

由于 emacs 在 在缓冲区中键入时会冻结,而不是在执行命令之后,诸如 toggle-debug-on-quitdebug-on-entry 没用。

我想我可以用printfs 标记adoc-mode.el 中的每个defun,但我希望有更简单的方法:)

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

这 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

我的.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!!

而testcase是(“shell”这个词被elisp删掉了):

$ cat test.doc 
blah blah blah
[source,shell]
foo
bar

现在,运行emacs,它将挂在(adoc-kwf-attriblist)。我对emacs编程了解不多,但似乎这个东西最终并没有将点移到end位置。

 (goto-char (or (text-property-not-all (point) end 'adoc-attribute-list nil)
             end))

【问题讨论】:

  • 当emacs死机时,你能用C-g打断它吗?
  • @Francesco:当 emacs 冻结时,它不能被 \C-g\ 中断。 Emacs 只是停留在那里,不响应事件(键入、单击以关闭窗口等)。
  • 你是对的——假设如果 text-property-not-all 返回,它返回的东西大于点。不幸的是,它可以返回与点相同的值,因此它会循环。我已经在 github 上进行了修复

标签: emacs elisp


【解决方案1】:

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

你试过“apropos”“debug”吗?

不确定 debug-on-signal 或 debug-on-quit。如果使用 Unix "kill" 或 Windows 任务管理器 "End Task" 向 emacs 发送信号,您可以使用 debug-on-signal 拦截它。

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

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

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

【讨论】:

    【解决方案2】:

    这是我将如何调试它。由于某些次要模式,可能会发生冻结。您可以执行 C-hm 来获取活动的次要模式的列表。然后使用emacs -Q 启动emacs 并加载adoc-mode,然后每次尝试重现问题时一一加载每个次要模式。这可能会导致你成为罪魁祸首。

    【讨论】:

    • 我这样做了。从emacs -Q开始,手动加载定义adoc-mode的文件(即adoc-mode.elmarkup-faces.el)。启用的次要模式列表是不同的(多一些,少一些)。在没有手动加载更多次要模式的情况下仍然出现该错误。
    猜你喜欢
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多