[英]Is there a trick to debugging a spin in emacs elisp, in a flymake module?
我在C#flymake模块中的emacs elisp中获得了CPU旋转。 (Flymake是emacs中定期运行构建的模块,然后突出显示当前缓冲区中的任何语法错误或警告。)
我即将涉足代码,寻找可能发生旋转的可能位置。
虽然我在这里,有没有人有解决旋转的建议? emacs中有什么东西可以让我停止执行并看到它停在哪里?
使用Mx set-variable
将debug-on-quit
为t
。 然后当问题发生时,点击Cg ,调试器会给你一个回溯,告诉你停止它时运行的是什么。
Flymake为启用了flymake-mode的每个缓冲区设置1秒计时器,以检查缓冲区是否被修改得比flymake-no-changes-timeout
秒前更多。
如果你在flymake模式下打开了很多缓冲区(几百个),那么这可能会吞噬一个令人惊讶的大量CPU,我有一个修补版本的flymake,它有一个全局计时器来解决这个问题,以及其他一些问题: https : //github.com/illusori/emacs-flymake
这对你来说可能不是同一个问题,但对我来说,当打开600个文件时,它会在桌面模式下打开时锁定Emacs,我很幸运能够每15分钟处理一次按键。
在OS XI上有一个类似的声音问题,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 ()
[...]
因此,锁定是由对话框消息“运行时发生配置错误...”或类似信息引起的
在这篇描述问题的帖子中 ,您可以使用以下命令禁用这些弹出消息:
然而,有时,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因为它没有使用这些功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.