ele*_*kil 10 c++ emacs cedet emacs-semantic
我在一个新的linux主机上重新安装了emacs 24.2.50,并基于magnars emacs配置启动了一个新的dotEmacs 配置.由于我在之前的工作流程中使用了CEDET取得了一些成功,因此我开始配置它.但是,每当我加载C++源文件时,都会有一些奇怪的行为.
[本部分已解决]
正如预期的那样,语义解析所有包含的文件(并在初始设置期间解析由semantic-add-system-include变量指定的所有文件),但它会打印出如下所示的错误消息:
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等)之上而不是打印类型的定义时,看起来解析并不真正起作用. modeline一条错误消息
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是我正在编辑的文件和缓冲区,而IndexMap和fXBetween是我正在编辑的文件所包含的文件中定义的类型/我正在编辑的文件所包含的某个文件.
我没有测试CEDET /语义的任何进一步的功能,因为问题非常烦人.我的cedet配置可以在这里找到.
编辑:在Alex Ott的帮助下,我解决了第一个问题.这是由于我可怕的cedet初始化.请参阅他的第一个答案,了解配置CEDET的正确方法!
仍然存在问题Idle Service Error(当启用时global-semantic-idle-local-symbol-highlight-mode,永久发生,不仅在检查点上类型的定义时).
并且存在如何禁用站点方式的init文件的新问题.
EDIT2:我已经semantic-debug-idle-function在缓冲区中执行了问题并产生了~700kb [sic!]输出.看起来它正在对数据容器执行某些操作,根据它的外观,它包含有关解析文件中定义的所有符号的信息.因为我已经解析了一个相当大的包(~20Mb源文件),所以这个表相当大.可以语义处理数据库那么大或者这是不可能的,也是我问题的原因?
EDIT3:删除~/.semanticdb所有包含的内容并重新解析所有包含就可以了.我仍然需要禁用站点方式的init文件,但由于这与CEDET无关,我将关闭此问题(可以在此处找到与站点方式的init文件相关的问题).