清理Eclipse索引,它与代码不同步

67

我正在使用Eclipse在Linux上通过链接的资源编写C++代码。 代码分析索引似乎已经损坏(转到定义会将光标放置在定义附近但不准确)。 刷新资源无法解决问题,重启Eclipse也无法解决问题。

是否有一种方法可以清除索引并重新构建它?

9个回答

84

右键单击您的项目,在索引子菜单下选择“重建”,“使用修改后文件更新”或“刷新所有文件”。

我不知道这三个选项之间的区别,但“使用修改后文件更新”或“刷新所有文件”通常对我有用。

此外,我确定您已经完成了此操作,但请确保运行最新版本的Eclipse CDT。当前版本似乎比以前版本具有更可靠的索引功能。


2
过去我有时不得不关闭并重新打开项目,出于某种原因才能实现这一点。 - Michael Burr
2
"Freshen all files" 的效果很好。但是"重建"并没有帮助。 - tutejszy
应该更加重视"刷新"。在多个地方将c++11更改为c++14后,我进行了多次重建,以便__cplusplus__变为201300,从而可以使用make_unique。毕竟,所有这些重建之后,我需要的是刷新步骤。 - cardiff space man
“Rebuild” 对我来说很有效 - 我特别使用的是Simplicity Studio 5(Silicon Labs基于Eclipse的衍生版本),一个符号下面出现了红色波浪线。 - Frederick

37
http://dev.eclipse.org/mhonarc/lists/cdt-dev/msg10390.html了解到"Rebuild," "Update with modified files," 或 "Freshen all files"之间的区别:

Rebuild: 仅适用于整个项目。清除索引并从头开始对文件进行索引。当被取消时,会留下一个空的或部分建立的索引。

使用已修改的文件更新:适用于资源选择。检查单个文件的时间戳或扫描器配置是否已更改,并更新已更改文件的索引。

更新所有文件:适用于资源选择。更新索引中的选定文件。索引不会清除,可以安全地取消操作。


4
虽然这不是问题的答案,但这仍然很有帮助。 - Axle
1
这个描述与我的预期相符,但与我在 Eclipse 行为中看到的不符。对我来说,“Freshen All Files” 解决了问题,但“Rebuild”没有。如果“Rebuild”真的会将索引删除并从头开始重新构建,那么这就毫无意义了。 - Ben

22

进入你的项目 属性 -> C++常规 -> 索引器

  • 使用'项目特定设置'进行此操作,
    (或在'配置工作区设置...'上)。
  • 取消选择'启用索引器',点击应用
  • 选择'启用索引器',点击应用

这将完全清除并重建索引。


谢谢,这很有帮助。此外,我还需要选择“索引未包含在构建中的源文件”选项。这是因为我的构建环境/工具链没有集成在Eclipse中(即Eclipse仅用于浏览和编辑代码,而不用于构建项目)。 - venk

17

以上方法都对我没用(Eclipse Indigo),索引仍然损坏,拒绝正确地重建。直到我尝试了这个:

http://slsam2.blogspot.com/2012/02/eclipse-cdt-index-not-working.html

这篇链接文章中的关键是:

Eclipse不再将你的项目视为C++项目。选择菜单 File/New/Convert to a C/C++ project 转换为C/C++项目。它需要一些时间来索引源代码。

我仍然想知道Eclipse如何控制不住地自己给自己惹麻烦。我怀疑安装其他软件包可能会触发它。也许是JavaScript支持在我的情况下。


1
非常感谢不仅发布链接,而且还为以后链接再次失效时保存相关信息。这应该是StackOverflow答案的要求。 - dwanderson
@dwanderson 这是:http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer-not-an-answer - skrrgwasme
1
只有这个适用于我的Eclipse版本:2019-03(4.11.0)。谢谢。 - alphaGeek
这是唯一对我有效的解决方案(4.12.0)。 - Z boson

7

只删除.metadata.plugins\org.eclipse.cdt.core下的.pdom文件可以帮助解决升级Neon.2到Neon.3后索引出现问题的情况。


这对我有用!我在一个基于Eclipse的IDE中遇到了一个奇怪的错误,导致Eclipse在启动时卡住并占用了大量的内存(但我能够确定索引是损坏的),所以Josh的答案对我来说不实用。 - 9a3eedi
我需要同时删除那里的 .xml 文件才能使其正常工作。 - arye

2
我发现我全局索引器设置为“使用项目索引器设置中指定的构建配置”,而项目索引器设置为不使用项目特定的索引器设置。但是,无论我选择哪个配置,它都会使用相同的固定配置进行索引。解决方法:窗口-首选项,C/C++,索引器。在“索引器的构建配置”部分中选择“使用活动构建配置”。愉快的一天。

1
你尝试过在 Eclipse 可执行文件的命令行中添加 -clean 吗?

1

Eclipse不再将您的项目视为C ++项目。选择菜单File/New/Convert to a C/C++ project转换为C/C++项目。需要一段时间来索引源代码。这对我有用。


请在Pavel的回答中发表评论,而不是重复解决方案。 - whoan

0

我一开始尝试了Josh Kelleys和mmmmms的答案,但都没有成功,最后通过检查我的包含路径来解决了问题。

一种查看它们的方法是在项目资源管理器中展开项目,应该会有一个名为“Includes”的条目。在其中,检查每个包含路径上是否有一个小黄色警告三角形。如果存在这个三角形,那么Eclipse很可能无法识别该路径。

可以通过右键单击项目资源管理器中的“您的项目”,然后选择“属性”--> C/C++常规 --> 路径和符号 --> 包含项 来编辑包含路径。

我看到了三个语言选项,汇编语言、Gnu C语言、Gnu C++语言。在开始添加路径之前,请选择正确的语言选项(可能是Gnu C++)。添加完所有路径后,点击 -->应用-->确定,如果需要,重新构建索引。

我的错误工作区路径看起来像MyProject/MyProject/folder,而实际上应该是MyProject/folder

对我来说,“问题”视图总是更新缓慢,即使重建索引也是如此。为确保错误仍然存在,请双击问题条目,以便Eclipse打开/重新加载相关文件。这对我更新“问题”视图似乎经常是必要的。

我不确定是Eclipse还是我的版本控制出了问题。无论如何,希望能帮到其他人!

我使用Luna并使用外部makefile进行构建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接