我在C#flymake模块中的emacs elisp中获得了CPU旋转。 (Flymake是emacs中定期运行构建的模块,然后突出显示当前缓冲区中的任何语法错误或警告。)
我即将涉足代码,寻找可能发生旋转的可能位置。
虽然我在这里,有没有人有解决旋转的建议? emacs中有什么东西可以让我停止执行并看到它停在哪里?
答案 0 :(得分:9)
使用M-x set-variable
将debug-on-quit
设置为t
。然后当问题发生时,点击 C-g ,调试器会给你一个关于停止时运行的内容的回溯。
答案 1 :(得分:5)
Flymake为启用了flymake-mode的每个缓冲区设置1秒计时器,以检查缓冲区是否已被修改超过flymake-no-changes-timeout
秒。
如果你在flymake模式下打开了很多缓冲区(几百个),那么这可能会吞噬一个令人惊讶的大量CPU,我有一个修补版本的flymake,它有一个全局计时器可以解决这个问题,并且其他一些问题:https://github.com/illusori/emacs-flymake
这对你来说可能不是同一个问题,但对我来说,在打开600个文件的桌面模式下打开时会锁定Emacs,我很幸运能够每15分钟处理一次按键。
答案 2 :(得分:2)
在OS X上我有一个类似的声音问题,flymake会在打开一个新文件时挂起emacs(即使只打开几个缓冲区)。启用debug-on-quit
没有帮助,因为整个GUI都已锁定。
将gdb附加到emacs返回以下内容:
$ gdb -p `psgrep emacs`
(gdb) bt
#0 0x00007fff98954e42 in __semwait_signal ()
#1 0x00007fff8e5d1dea in nanosleep ()
#2 0x00007fff99e3af05 in +[NSThread sleepUntilDate:] ()
#3 0x000000010015d917 in -[EmacsDialogPanel runDialogAt:] ()
#4 0x000000010015fa1f in ns_popup_dialog ()
[...]
因此,锁定是由对话框消息“运行时发生配置错误...”或类似的
引起的从this post describing the problem,您可以使用以下内容禁用这些弹出消息:
然而,有时,Emacs只是挂起。 OS X红色/黄色/蓝色关闭/最小化/缩放按钮变为灰色,就像Emacs失去焦点一样,但它实际上是活动应用程序。切换到Emacs周围的任务并不能恢复它。你不能Command-Q退出它。
当你最终放弃并终止它并重新启动时,你已经丢失了你的工作,你的shell,它并没有保存最近文件的列表。
(setq flymake-gui-warnings-enabled nil)
这可以防止flymake提醒你它正在自动关闭,但它比替代方案更好。
flymake-display-warning调用Emac的“消息框”功能,因此可能还有其他工具会导致同样的问题。
还有一个通用变量use-dialog-box,但是将它从默认值设置为nil对flymake没有帮助。还有一个建议在互联网上使用defadvice告诉y-or-no-p和yes-or-no-p设置use-dialog-box为nil,但同样,这不会有助于flymake因为它没有使用这些功能。
答案 3 :(得分:0)