Eclipse 索引不起作用

Posted

技术标签:

【中文标题】Eclipse 索引不起作用【英文标题】:Eclipse indexing not working 【发布时间】:2012-07-06 14:32:34 【问题描述】:

我在 Ubuntu 的 Eclipse 3.5.2 Galileo 中使用 CDT。

我的 Eclipse 索引器有时不工作。我的意思是当我ctrl 单击一个功能时,它会显示Could not find symbol in index。此外,F3 按钮单击会导致相同的错误消息。实际上大多数地方它都不起作用,并且在极少数地方起作用。

我见过一些其他版本的 Eclipse,在文件菜单下列出了一个用于索引的菜单项。像 File->Indexer->Rebuild.... 但在我的 File 菜单中,Indexer 没有这样的菜单项。

唯一的方法是使用其他版本的 Eclipse 还是缺少一些东西?任何有关这方面的建议都会有所帮助。

【问题讨论】:

Clean Eclipse Index, it is out of sync with code的可能重复 索引对我不起作用,因为我创建了一个新项目,但不是 C/C++ 项目。我已经把它删了。我在一个新文件夹中创建了一个“现有的 makefile 项目(C/C++)”。然后在 Eclipse 中创建一个新文件夹并将源代码链接到它。索引现在正在工作。我不想直接在源代码中创建 Eclipse 项目,因为它是由 git 管理的,它会影响 .cproject 文件。 【参考方案1】:

就我而言,没有任何效果,最后我做了以下事情:

 1) Close the project
 2) Delete the project(do not check from disk option)
 3) create new project with existing code(use the deleted project path)
 4) Successfully indexed my c++ code

【讨论】:

将项目导入为 Makefile 项目。 谢谢,反正好像没必要删除项目,直接关闭就行了,用CMake项目看来需要先运行cmake .再重新打开项目。【参考方案2】:

要添加包含要解析的代码的路径,请按以下步骤操作: 1.右键项目 2. 选择属性 3. 转到 C/C++ 常规 4. 转到路径和符号 5.如果路径缺失,添加路径。

要重新解析代码,请按以下步骤操作: 1.右键项目 2. 选择索引 3.重建

如果这不起作用,那么你就不走运了。 c++ 是一种很难解析的语言。

【讨论】:

【参考方案3】:

如果您的索引器卡住并且无限期挂起,您可以从.metadata 中删除项目的索引器相关文件。确保同时没有运行 eclipse。

.metadata 目录作为隐藏文件夹位于您的工作区路径中。

您可以在此处导航到:

<workspace_path>/.metadata/.plugins/org.eclipse.core.runtime/.settings/

.settings/ 目录中有.prefs 文件,分别存储每个项目的首选项。

例如:org.eclipse.cdt.core.prj-test-project.prefs存储项目的偏好test-project

使用文本编辑器打开此文件并删除所有以indexer 开头的行。这会将这个特定项目的索引器设置重置为默认值。

或者,您可以从org.eclipse.cdt.core.prefs 中删除所有以indexer 开头的行;这样做会重置整个工作区的索引器设置。

【讨论】:

按照这些步骤后,我只需要Index -> Rebuild 和瞧!【参考方案4】:

相信你可以通过运行清除索引:

rm .metadata/.plugins/org.eclipse.jdt.core/*.index

然后重新启动 Eclipse。然后它将重建其索引。

这在 Java 项目中对我有用,但我想它对于所有(大多数?)项目类型都有相同的索引。

【讨论】:

【参考方案5】:
    右键单击项目。 选择New->ConvertC++ 项目。 选择您的配置。然后下一步 索引器将开始索引所有文件。

【讨论】:

【参考方案6】:

对我来说这很有效:

右键单击并关闭项目 再次打开项目 右键单击并选择索引->重建

希望对大家有帮助。

【讨论】:

【参考方案7】:

您可以尝试重建索引。 在项目视图中右键单击项目。然后Index -> Rebuild

【讨论】:

【参考方案8】:

这是我在Project->C++ Index->Rebuild 失败后使用的解决方案。这个技巧避免删除你当前的项目:

1) Copy the current project (Right click->Copy from Project Explorer)
2) Paste it (Right click->Paste from Project Explorer) and give the copy another name
3) The indexer should now start and index both projects
4) When indexation is complete, you can delete the copy

PS:确保您的原始项目是实际的 C++ 项目,否则这显然行不通。

【讨论】:

【参考方案9】:

将项目转换为 C 或 C++ 特性

Right click on project:新建 > 转换为 C/C++ 项目

In "Convert to C or C++":选择 C/C++ 项目

In "Project options":勾选“指定项目类型”

...Project Type:选择“Makefile项目”

...Toolchains:Gross GCC

【讨论】:

【参考方案10】:

我遇到了同样的问题,结果发现 index 文件夹归 root 所有(由于某种原因,我必须以 root 身份运行一次 Eclipse)我使用 sudo chown -R username projectfolderpath 回收了项目文件夹并解决了问题。

【讨论】:

【参考方案11】:
    在安装了 eclipse 的地方执行 eclipse.exe -clean -refresh。 在 Eclipse 中使用给定的源代码文件夹路径创建一个新的 C/C++ 项目。 (不适用于基于现有工作空间的新项目)

以上步骤对我有用。

【讨论】:

【参考方案12】:

对我来说,创建项目索引器时选择为无是一个问题。删除了项目,再次创建项目时,我根据需要选择了索引器选项“LINUX_GCC”,然后它对我有用

【讨论】:

【参考方案13】:

刚刚在我的 C++ ARM Cross GCC 项目中遇到了同样的问题。我正在 Windows 上进行开发,使用 Makefile 和带有 GNU ARM Embedded Toolchain 的 Ubuntu Docker 映像来构建项目。

在我的情况下,摆脱未解析符号的解决方案可以分为两部分:


    CDT Arm Cross GCC 内置编译器设置没有编译器的路径。

Project Properties -> C/C++ General -> Preprocessor Include Paths -> Providers(tab) 中必须提供编译器的路径。

使用GNU ARM Embedded Toolchain获取编译器规范的命令的入口:我目前使用的是:

C:\GNU_Arm_Embedded_Toolchain\9-2020-q2-update\bin\arm-none-eabi-g++.exe $FLAGS $cross_toolchain_flags -E -P -v -dD "$INPUTS"

注意:是的,我在 Windows 机器上安装了与在 Docker 映像中使用的工具链相同的工具链。

要验证调用是否正确,您可以勾选在控制台视图中分配控制台,这将为控制台提供有用的输出。此外,在 Entries 选项卡中,当您展开 CDT Arm Cross GCC Built-in Compiler Settings 时,您应该会看到包含的包含和符号。


    Project Properties -> C/C++ General -> Paths and Symbols 菜单中缺少符号。

因为我在 Makefile 中有我的定义,所以我忘了在这里也添加我的 MCU 的定义。


希望这对某人有所帮助! :)

【讨论】:

以上是关于Eclipse 索引不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 自动完成功能不起作用

为啥 Eclipse 的 Adt 插件不起作用?

Eclipse 自动完成功能在某些 Java 文件中不起作用

Bindview 在 Eclipse 中不起作用

从 Eclipse 中运行时,JSTL 不起作用

为啥我的密码不起作用? Eclipse 和 Github [重复]