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?
The CDT Project provides a fully functional C and C++ Integrated Development Environment based on the Eclipse platform.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With