GDB Emacs 在 运行 任何二进制文件后挂起

GDB Emacs hangs after running any binary

我正在尝试设置 Emacs 和 GDB,以便我可以使用 gdb-many-windows 选项 运行ning。但是,m-x gdb 在 运行 任何二进制文件后挂起,Emacs 开始消耗 100% CPU 并变得无响应。

我正在运行宁:

情况如下:

我 运行 一些带有 m-x gdb 的二进制文件,然后 'gdb --i=mi [name of binary]'。一切正常,正确的 windows 设置和一切。然后我将命令 'run' 给 GDB,它 运行 的代码是正确的。但是一旦代码完成,Emacs 就会变得无响应并开始消耗 100% CPU 的电量。即使使用简单的 hello world 程序也会发生这种情况。我尝试提供各种选项,例如 --annotate=3、--fullname 等

如果我改为 运行 m-x gud-gdb,我可以 运行 相同的二进制文件就好了,gdb 正常退出,我可以继续使用 Emacs。

如有任何帮助,我们将不胜感激。

我的 mac 确认了错误。更重要的是,具有相同配置(实际上根本没有配置)的 emacs 在我的 Linux machines 中运行良好。所以这是一个与 Mac OS X 相关的错误。

更新:

  • emac中的某些modes/plugins似乎与"gdb"冲突。当我 运行 它没有在 .emacs 中加载任何东西时,它会在 gdb 调试完成时停止挂起 emacs。 我会尝试跟踪是哪种模式导致了此类问题,并在此报告。
  • 似乎很多模式都可能导致在 gdb 完成调试时冻结 emacs,例如"helm" 和任何使用 helm 的模式,"function-args"(在其源代码中启用 helm 的某些功能)
  • 根据我的配置,启用了数十种模式,helm是导致gdb在到达末尾时冻结emac的关键模式。
  • 这不是因为 helm,而是因为 semantic-mode,当你想使用 helm-semantic-or-imenu.
  • 时可能会启用它

结论:

semantic-mode造成的,在Mac OS X中表现很差,连基本功能都有bug。在 Linux 下,它没有任何明显的问题,这就是 gdb 在 Linux 下工作的原因。搜索你的 .emacs 并确保禁用所有 semantic-mode,然后它应该可以工作。

请注意,即使您在 运行 gdb 之前禁用了 semantic-mode,如果最初启用了 semantic-mode,它仍会冻结 emacs . semantic-mode 最初已被禁用。

感谢 thierryvolpiatto 帮助调试: https://github.com/emacs-helm/helm/issues/1168#issuecomment-140132443