繁体   English   中英

在flymake模块中调试emacs elisp中的旋转是否有技巧?

[英]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-variabledebug-on-quitt 然后当问题发生时,点击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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM