Emacs运行缓慢且经常卡顿 - 如何进行调试?

14

我的Emacs有时候会卡顿很久。似乎是在调用某些插件后发生的,但我不确定。我已经优化了启动时间,使它们自动加载。

有时,它需要几秒钟才能执行我输入的内容,而在其他情况下,它只是转到后台,当我打开它时,它会崩溃并生成核心转储。 转储的输出通常是一些已崩溃的C函数。

我该如何在运行时调试性能,并确定哪些库是原因?可能是内存泄漏,但我又不知道。

我怀疑是expand-region插件或grizzl插件导致了这个问题。

我在OS X上的终端中运行Emacs 24。

非常感谢任何帮助!

2个回答

21

我建议你尝试使用M-x profiler-start RET RET,然后重现慢速行为(可能需要多次,因为这是基于采样的分析器),然后使用M-x profiler-report RET。 然后在第一个条目上使用C-u RET,希望能显示时间花费的位置。

至于崩溃:任何崩溃都很可能是Emacs中的错误,因此请使用M-x report-emacs-bug


1
太棒了,谢谢!看起来有26%的时间花在了flycheck-handle-signal上。有没有办法让flycheck更高效或更快?还是有其他替代方案吗?你用什么进行语法检查?第二个使用22%的是file-truename,它似乎是f.el包(我不确定为什么会出现,因为我没有使用任何东西)。 - darksky
我似乎在Ffind_file_name_handlerfast_string_matchre_search这些函数上崩溃了。我的搜索使用'isearch-forward-regexp。这个搜索是慢的吗?有更快的方法吗? - darksky
实际上,file-truename不在f.el中。它还用于file-symlink-p,这似乎需要大约20%的CPU。我尝试寻找这个函数,但无法在任何地方找到它。你知道这是什么吗? - darksky
“file-truename”所占用的22%时间可能并不意味着“file-truename”运行速度非常慢,相反,这意味着某些函数调用“file-truename”的次数过于频繁,因此您需要查看上层函数以确定是哪个函数在频繁调用“file-truename”。 - Stefan

8

在下一次卡顿时,执行M-x toggle-debug-on-quit,然后按下C-g。你将会得到一个包含此时正在执行的命令/函数的回溯信息,通常有一些可疑的函数名称能够指示是哪个插件导致了卡顿。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接