Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'm working on some legacy C++ code written using "vi" and "emacs" and I am trying to build an eclipse CDT setup to maintain it (on linux). The two main problems I've been facing are that the indexing takes very long (over 4h) and that even once that's finished, eclipse is barely responsive.

The code base is structured in a "3-4 level deep" manner:

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

Example:

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

There are about 200 "modules" under /system/* and around 50 under /server/Authentication/*. There is also an amazingly convoluted make system with 20 years worth of make-code written by people who wanted to showoff their make abilities :-)

I've tried two approaches so far

1) Two eclipse cdt projects, namely /system and /Authentication

2) One eclipse cdt project per "module" ending up with +200 modules. I even calculated dependencies between modules.

In both approaches, indexing takes very long. On approach 1) I get quite a few problems with non-resolved dependencies. With approach 2) eclipse is barely responsive, when I ctrl+click a function I can go for a coffee and come back before it responds...

Anyone out there has worked with big projects like these? What do you suggest?

like image 204
krico Avatar asked Mar 05 '12 10:03

krico


People also ask

What is CDT project in Eclipse?

The CDT Project provides a fully functional C and C++ Integrated Development Environment based on the Eclipse platform.

What does indexer do in Eclipse?

Eclipse includes a background parser called 'Indexer' which is used to assist the developer with various kind of information, for example jumping to a variable declaration or definition. Basically it is a parser running in the background collecting information about the sources and building up that 'index' data base.


2 Answers

General recommendation here is to provide more RAM for Eclipse. First, you will need to tweak your eclipse.ini configuration file as the default one is not suitable for big projects. Here is my eclipse.ini file:

-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

Here I used -Xmx4096M to provide 4Gb of RAM.

To improve responsiveness you will also need to configure Indexer Cache limits. I recommend to increase all parameters by 2-3 times, depending on project size.

like image 109
ks1322 Avatar answered Oct 16 '22 07:10

ks1322


Using the Project resource filters helped me a lot. I removed from the project tree folders which I didn't want either to modify or to submit to indexing.

To create a new filter just right click on the project and then open the Properties panel then reach Resource -> Resource Filters

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

Sometimes if your project sources are too big (ex: about 5GB ) you need to use a filter otherwise the indexing process never end correctly.

like image 41
Bemipefe Avatar answered Oct 16 '22 07:10

Bemipefe