奇怪的语义错误(Strange semantic error)

2019-08-02 07:05发布

我有一个新的Linux主机上重新安装emacs的50年2月24日,开始基于新dotEmacs配置magnars emacs的配置。 既然我已经在我以前的工作流程中使用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,双,浮法,等等),而不是在模式行的错误信息,例如打印类型的定义

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))"

其中DEPFETResolutionAnalysis.cc是文件和缓冲区我目前正在编辑和IndexMapfXBetween在由我编辑的文件/文件由我编辑的文件中包含一些文件包含的文件中定义的类型。

因为这个问题是非常恼人我没有测试过CEDET /语义的任何进一步的功能。 我CEDET配置,可以发现在这里 。

编辑:亚历克斯奥特的帮助下,我还挺解决了第一个问题。 这是因为我的可怕CEDET初始化。 见他的第一个答案来配置CEDET的正确方法!
仍然存在与问题Idle Service Error (其中,使当global-semantic-idle-local-symbol-highlight-mode ,检查点的类型的定义不仅当发生永久)。
还有就是如何禁用该网站明智的init文件(S)新的问题。

EDIT2:我已执行semantic-debug-idle-function在问题出现时的缓冲液和它产生〜700KB [原文如此!]输出。 这看起来是一个数据容器,由它的外观,包含在解析该文件中定义的所有符号信息进行一些操作。 正如我已经解析了一个相当大包(大约20MB的源文件)此表是相当大的。 可以语义处理数据库,大型或这是不可能的,我的问题的原因是什么?

EDIT3:删除的内容~/.semanticdb和重新分析所有包含的伎俩。 我还需要禁用该网站明智的初始化文件,但是因为这是不相关的CEDET我将关闭这个问题(相关站点明智的init文件的问题,可以发现在这里 )。

Answer 1:

你需要改变你的init文件,因此将只执行一次CEDET的负荷,不将调用每个.H / .HPP / .C / .cpp文件挂钩。 你可以改变这个配置为基础,并在阅读更多的文章 。

你的问题是,因为语义试图分析头文件引起的,当它试图打开它们,那么它的初始化程序被再次呼吁,并再次...



Answer 2:

第一个问题是由正确配置这是对亚历克斯奥特的discribed CEDET解决的主页 。 他的回答解决了这个第一个问题。 在他的回答中指定的配置文件是一个不错的配置一个很好的开始; 我已经使用了同样的到config CEDET我的需要。

第二个问题,从1.1到集市(库)的版本,这说明消失,一旦我更新CEDET 这里和亚历克斯”的文章。 Additionaly一个必须删除该目录的内容~/.semanticdb (其中包含语义数据库,并损坏我猜)。

我要感谢亚历克斯·奥特对他的帮助和我贴在我的整个旅程,到解决方案:)



文章来源: Strange semantic error