【问题标题】:What do I do when the Eclipse CDT indexer gets stuck?Eclipse CDT 索引器卡住了怎么办?
【发布时间】:2025-12-17 15:45:02
【问题描述】:

我使用的是 Eclipse CDT 2020-06(但在我的早期版本中发生了这种情况。)

有时,Eclipse CDT 在解析某些文件时会卡住。百分比指标不前进;并按下任务的取消按钮使其“已请求取消”,但它会一直卡住。因此,我不仅不能在我的项目中使用索引,而且大多数其他“异步”任务都排队并且也无法执行。发生这种情况时,我现在基本上放弃并重新开始;最终可能会使用过滤规则屏蔽掉行为不端的文件。

我的问题是:有没有更好的办法来处理索引器卡住的问题?

编辑:

如果我使用 -debug 运行 Eclipse 并启用索引器调试,我得到的唯一输出是:

Indexer: start PDOMFastIndexerTask
Indexer: parsing /cuda-api-wrappers/examples/other/io_compute_overlap_with_streams.cu

这就是我卡住的地方。

【问题讨论】:

  • 可能 Eclipse 内存不足。看看相关问题*.com/q/9565125/72178
  • @ks1322:嗯,这实际上不是一个大项目。现在解析器卡在开始做任何事情的开始,在 0%。取消

标签: workflow eclipse-cdt freeze indexer


【解决方案1】:

如何“解开”Eclipse 的索引器

我现在在 Linux 上专业地使用 Eclipse(仅用于代码编辑,而不是构建——我在命令行中进行)4 年了,大量 em> 代码大小高达 200 GiB 的单一存储库。我的索引器已经卡住了数百次,而这两种解决方案似乎始终可以“解开”索引器。

1。增加 Eclipse 可用的堆 (RAM)

将 Eclipse 可用的最大 RAM 从 8 GiB 加倍到 16 GiB 为我解决了这个问题。它在4841/7617 sources, 27463 headers 停留了几个小时,永远解析同一个文件,RAM 最大为 8 GiB。将 Eclipse 可用的 RAM(堆)从 8 GiB 更新到 16 GiB 后,我让索引器在夜间运行 10 小时,到早上它就完成了。

注意:如果尝试为 Boost 库建立索引,一些初始测试让我怀疑 Eclipse 会花费大约 64 GiB~128 GiB 的 RAM(堆) 来索引它们,所以我通常只是将所有或大部分 Boost 库排除在索引之外。

要使 Eclipse 可用的 RAM 翻倍,请打开(在 Linux 上):/home/username/eclipse/embedcpp-2021-06/eclipse/eclipse.ini,或您的等效路径,然后修改 -Xmx 值。例如:我将我的地址从 -Xmx8196m(8196 MiB 或 8 GiB)增加到 -Xmx16384m(16384 MiB 或 16 GiB)。关闭并重新打开 Eclipse 以使此更改生效。

另外,打开在 Eclipse 窗口底部显示堆状态(如果默认情况下尚未打开):

窗口→首选项→常规→选中“显示堆状态”复选框→单击“应用并关闭”。这是 Eclipse 窗口底部现在的样子!

来源:

  1. My Google document above,第 12 页。
  2. 另见:How to view memory usage in eclipse (beginner)

您可能需要为您的 PC 提供更多虚拟内存以支持上述 RAM 增加

如果您没有足够的物理 RAM 来处理这种增加,但您有一个高速 SSD,您可以使用您的 SSD 作为 虚拟内存 物理内存不足。这可以在 Windows 和 Linux 上完成,也可能在 Mac 上完成。如果在 Linux 上,follow my instructions here to increase your vitual memory swapfile 更有用:例如:将其增加到 32 GiB。现在,您可以设置 Eclipse 使用的最大堆大小将等于 物理内存(真实 RAM) + 虚拟内存交换文件(在固态驱动器上模拟的假“RAM”)。不过,为其他程序留出一些 GiB - 不要将其 全部 交给 Eclipse。

2。排除您不需要索引的所有构建文件夹和第 3 方库(尤其是 Boost!)

请参阅我关于如何使用 1) 资源过滤器和 2) 手动符号链接生成器脚本(我的首选)执行此操作的非常详细的答案:How to exclude all parts of a folder in Eclipse except for a few specific sub-folders within it

走得更远

我在我的 Eclipse 设置文档中写了有关此设置以及您可能会发现有用的大量其他设​​置和内容,您可以在此处找到:

  1. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/tree/master/eclipse
  2. Direct link to the Google doc

另见:What's the recommended Eclipse CDT configuration for big C++ project (indexer takes forever)

【讨论】:

    【解决方案2】:

    我有理由相信这可能与 NVIDIA 用于 CUDA 支持的 Eclipse 插件有关。索引器卡在.cu 文件上;并且使用新版本的 Eclipse 并且没有插件,索引可以顺利结束。

    【讨论】:

    • 如果这些是文本文件并且它认为可以索引它们,仍然可能是 RAM 问题(也许?)。 See my answer。 .cu 文件的内容是什么?它们有多大?
    【解决方案3】:

    有没有更好的办法来处理索引器卡住的问题?

    您可以尝试自己调试 Eclipse 索引器。使用 -debug 选项从控制台运行 Eclipse:

    eclipse -debug <options file>'
    

    的内容是:

    org.eclipse.cdt.core/debug=true
    org.eclipse.cdt.core/debug/indexer/activity=true
    org.eclipse.cdt.core/debug/indexer/statistics=true
    org.eclipse.cdt.core/debug/indexer/problems=true
    

    索引器卡住时查看调试输出。您可能会看到一些来自索引器的错误消息,可以进一步搜索。

    【讨论】:

    • 所以,我做到了。没有错误消息 - 它只是卡在某个文件上。而且文件本身甚至不是特别值得注意。最后一个控制台输出行是:Indexer: parsing /cuda-api-wrappers/examples/modified_cuda_samples/matrixMulDrv/matrixMul.cu