【问题标题】:Is there a trick to debugging a spin in emacs elisp, in a flymake module?在flymake模块中调试emacs elisp中的旋转是否有技巧?
【发布时间】:2010-11-14 19:31:24
【问题描述】:

我在 C# flymake 模块中的 emacs elisp 中获得了 CPU 旋转。 (Flymake 是 emacs 中的模块,它会定期运行构建,然后突出显示当前缓冲区中的任何语法错误或警告。)

我将深入研究代码,寻找可能发生旋转的可能点。

当我在做这件事时,有没有人对弄清楚旋转有什么建议? emacs 中有什么东西可以让我停止执行并查看它停止的位置吗?

【问题讨论】:

    标签: debugging emacs elisp flymake


    【解决方案1】:

    使用M-x set-variabledebug-on-quit 设置为t。然后当问题发生时,点击C-g,调试器会给你一个你停止它时正在运行的回溯。

    【讨论】:

    • 还有 M-x toggle-debug-on-quit。
    【解决方案2】:

    Flymake 为每个启用了 flymake-mode 的缓冲区设置一个 1 秒的计时器,以检查缓冲区是否在 flymake-no-changes-timeout 秒前被修改。

    如果您在 flymake 模式下打开了很多缓冲区(数百个),那么这可能会占用大量 CPU,我有一个 flymake 的补丁版本,它有一个修复这个问题的全局计时器,还有一个其他几个问题:https://github.com/illusori/emacs-flymake

    这对你来说可能不是同一个问题,但对我来说,在桌面模式下打开 600 个文件时它会锁定 Emacs,我很幸运每 15 分钟处理一次按键。

    【讨论】:

    • 谢谢,Sam,这看起来很有帮助,我会试试看。
    【解决方案3】:

    在 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 的 'message-box' 函数,因此可能有其他工具会导致同样的问题。

    还有一个通用变量 use-dialog-box 但将其从默认 t 设置为 nil 对 flymake 没有帮助。互联网上还有一个建议使用 defadvice 告诉 y-or-no-p 和 yes-or-no-p 将 use-dialog-box 设置为 nil,但同样,这对 flymake 没有帮助,因为它没有使用这些功能。

    【讨论】:

      【解决方案4】:
      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多