【问题标题】:What's the recommended Eclipse CDT configuration for big C++ project (indexer takes forever)大型 C++ 项目的推荐 Eclipse CDT 配置是什么(索引器需要永远)
【发布时间】:2012-03-22 20:02:25
【问题描述】:

我正在处理一些使用“vi”和“emacs”编写的遗留 C++ 代码,并且我正在尝试构建一个 Eclipse CDT 设置来维护它(在 linux 上)。我一直面临的两个主要问题是索引需要很长时间(超过 4 小时),而且即使完成了,eclipse 也几乎没有响应。

代码库以“3-4 级深度”的方式构建:

/system/${category}/${library}/
/server/${serverName}/${component}/

例子:

/system/CORE/CommandLine/*.cpp
/system/CORE/Connection/*.cpp
...
/server/Authentication/DB/Objects/*.cpp
/server/Authentication/Main/*.cpp

/system/* 下大约有 200 个“模块”,/server/Authentication/* 下大约有 50 个。 还有一个令人惊讶的复杂的制作系统,由想要炫耀他们制作能力的人编写的价值 20 年的 make-code :-)

到目前为止,我已经尝试了两种方法

1) 两个eclipse cdt项目,分别是/system和/Authentication

2) 每个“模块”有一个 eclipse cdt 项目,最终有 +200 个模块。我什至计算了模块之间的依赖关系。

在这两种方法中,索引都需要很长时间。在方法 1) 上,我遇到了很多未解决的依赖项问题。使用方法 2) eclipse 几乎没有响应,当我 ctrl+单击一个功能时,我可以去喝杯咖啡,然后在它响应之前回来......

有人参与过这样的大型项目吗?你有什么建议?

【问题讨论】:

  • 您的Windows->Preferences->C/C++->Indexer 是否设置为“快速(推荐)”或“完整”索引器?它应该是“快速”。
  • @iammilind 我似乎没有那个选项(eclipse Indigo)
  • @iammilind 似乎在较新的版本上,该选项不可用

标签: c++ eclipse eclipse-cdt


【解决方案1】:

这里的一般建议是为 Eclipse 提供更多 RAM。首先,您需要调整您的eclipse.ini 配置文件,因为默认配置文件不适合大型项目。这是我的eclipse.ini 文件:

-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.eclipse.epp.package.cpp.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512M 
-Xmx4096M 
-XX:PermSize=256M 
-XX:MaxPermSize=512M

这里我使用-Xmx4096M 来提供 4Gb 的 RAM。

为了提高响应能力,您还需要配置Indexer Cache limits。我建议将所有参数增加 2-3 倍,具体取决于项目大小。

【讨论】:

  • 这当然是很好的建议。我没有提到这一点,但我已经更改了我的 -Xmx 和索引器缓存限制。我想没有什么可做的了:-(
  • 好吧,我没有什么要推荐的了,虽然没有这些设置,我的项目索引需要很长时间,正如您所描述的那样。我的项目也很大。
【解决方案2】:

使用项目资源过滤器对我帮助很大。 我从项目树文件夹中删除了我不想修改或提交给索引的项目。

要创建新过滤器,只需右键单击项目,然后打开 Properties 面板,然后到达 Resource -> Resource Filters

http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.user/concepts/resourcefilters.htm

有时如果您的项目源太大(例如:大约 5GB),您需要使用过滤器,否则索引过程永远不会正确结束。

【讨论】:

    【解决方案3】:

    -Xss8g 在 Neon 上也需要 eclipse.ini 以防止堆栈溢出。

    同时考虑ulimit -Sv unlimited

    在 Ubuntu 14.04 上测试。

    【讨论】:

    • ulimit -Sv 意味着移除对 shell(可能还有它的子进程)可用的虚拟内存量的任何(软)限制。但是 - 你确定 8 GB 堆栈是个好主意吗?
    • @einpoklum 让我知道您是否知道大筹码的任何缺点。我有 32GB 内存。并且在关闭交换的情况下,我认为最坏的情况 OOM 应该会访问,即使你毁掉了你的 RAM。使用交换可能会进入交换减速疯狂模式。
    猜你喜欢
    • 2017-11-29
    • 2020-03-23
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多