我在emacs中使用Asciidoc工作了很多(adoc-mode
)。我相信編輯內聯源代碼時會出現一個錯誤。 emacs會凍結,CPU消耗會達到100%。我可以很容易地重現這種行爲。在adoc模式下調試emacs凍結
我該如何確定哪些腳本導致emacs掛起?並最好產生一個回溯?
由於emacs的凍結而打字緩衝內,而不是執行的命令時,類似的東西 toggle-debug-on-quit
或debug-on-entry
之後是無用的。
我想我可以在adoc-mode.el
每一個defun
標記與printf
S,但我希望有一個更簡單的方法:)
編輯: 所以,我結束了grep
平我~/.emacs.d/lisp
爲所有defun
s和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
我.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!!
而測試用例是(單詞 「殼」 被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
@Francesco:當emacs凍結時,它不能被\ C-g \中斷。 Emacs只停留在那裏,沒有響應事件(打字,點擊關閉窗口等)。 –
你是對的 - 有一個假設,如果text-property-not-all返回,它會返回比point更大的東西。不幸的是,它可以返回相同的點,所以它循環。我已經修復了github –