奇怪的语义错误

2024-01-25

我已在新的 Linux 主机上重新安装了 emacs 24.2.50 并基于以下内容启动了新的 dotEmacs 配置magnars https://github.com/magnars/.emacs.demacs 配置。由于我在之前的工作流程中使用 CEDET 取得了一些成功,所以我开始配置它。然而,每当我加载 C++ 源文件时,都会出现一些奇怪的行为。

【这部分已解决】
正如预期的那样,语义解析所有包含的文件(并且在初始设置期间解析由语义添加系统包含变量),但它会打印一条错误消息,如下所示:

WARNING: semantic-find-file-noselect called for /usr/include/c++/4.7/vector while in set-auto-mode for /usr/include/c++/4.7/vector. You should call the responsible function into 'mode-local-init-hook'.

在上面的示例中,为 STL 矢量打印了错误,但为我正在访问的文件以及任何后续包含的每个文件打印了相应的错误消息。因此,需要相当长的时间才能完成,不幸的是,无论我打开新的缓冲区,该过程都会重复。

【这个问题也解决了】
此外,当我将点放置在非 c 基元类型(即不是 int、double、float 等)上方而不是在模型行中打印类型的定义时,解析似乎并没有真正起作用,例如错误消息

Idle Service Error semantic-idle-local-symbol-highlight-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, (((0) \"IndexMap\"))" Idle Service Error semantic-idle-summary-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, ((\"fXBetween\" 0 nil nil))"

where DEPFET 分辨率分析.cc是我当前正在编辑的文件和缓冲区IndexMap and 之间的fX是我正在编辑的文件包含的文件/我正在编辑的文件包含的某些文件中定义的类型。

我还没有测试 CEDET/semantic 的任何进一步功能,因为这个问题非常烦人。我的 cedet 配置可以找到here http://pastebin.com/GNMkSbFV.

EDIT:在亚历克斯·奥特的帮助下,我解决了第一个问题。这是由于我可怕的 cedet 初始化。请参阅他的第一个答案,了解配置 CEDET 的正确方法!
问题仍然存在Idle Service Error(其中,当启用global-semantic-idle-local-symbol-highlight-mode,永久发生,不仅在检查点类型的定义时)。
还有就是new如何的问题禁用站点初始化文件.

EDIT2:我已经执行了semantic-debug-idle-function在发生问题的缓冲区中,它会产生约 700kb [原文如此!] 的输出。看起来它正在对数据容器执行一些操作,从外观上看,该数据容器包含有关解析的文件中定义的所有符号的信息。由于我解析了一个相当大的包(~20Mb 源文件),所以这个表相当大。语义可以处理这么大的数据库吗?或者这是不可能的,以及我的问题的原因?

EDIT3:删除内容~/.semanticdb并重新解析所有包含内容就成功了。我仍然需要禁用站点方式初始化文件,但由于这与 CEDET 无关,我将关闭此问题(与站点方式初始化文件相关的问题可以找到here https://stackoverflow.com/questions/13233285/howto-disable-the-emacs-site-start-files-permanently).


您需要更改 init 文件,以便它仅执行一次 CEDET 加载,而不是在为每个 .h/.hpp/.c/.cpp 文件调用的挂钩中。你可以改变这个配置 https://gist.github.com/3930120作为基础,并阅读更多内容以下文章 http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html.

您遇到的问题是由于 Semantic 试图分析头文件而引起的,当它尝试打开它们时,它的初始化例程会被再次调用,然后再次......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

奇怪的语义错误 的相关文章