Source Code Browsing Tools? 165
Marco Sanvido asks: "I often look at source code (especially C, but this question is valid for other languages as well) and I have a really hard time in understanding how it works. Documentation is often missing or quite outdated, and the only way to see how the program works is to try to understand the source code. Which tools do you prefer to use for browsing and studying source code? So far I have used LXR for Linux, Eclipse for java, and CScope, but I'm not sure that these tools are the best solution." It's tempting to flood this question with answers for your IDE, but the key thing here is _browsing_, not _development_. What decent, lightweight programs would work well as source code viewers?
A couple of options (Score:5, Informative)
If you're looking more for documentation of existing code, doxygen [stack.nl] is great. It produces click-to-follow hierarchies, graphical pictures of trees, and can will intelligently display some of the comments it encounters. It can produce output in html, LaTeX, rtf, PS, PDF, and even man pages. And I know from experience that it can handle some pretty massive projects.
OpenGrok (Score:5, Informative)
OpenGrok
its incredibly easy to use, and makes things very easy to read. and is now packaged for your enjoyment.
and available at http://www.opensolaris.org/os/project/opengrok/ [opensolaris.org]
Krugle (Score:3, Informative)
LXR (Score:2, Informative)
LXR's claim to fame is that it started out being a cross-referenced browser for the linux kernel source code, but since it was released, the newer versions has moved towards becoming more of a general source browser. (might need to use cvs, don't know if a proper release was made)
It does neat tricks like processing source code, building function/variable/header/etc line references for usage, definition, declaration etc, and cramming them into a db for retreival. It can also handle interfacing with CVS to pull source code directly from a CVS server, which is interesting. Also handles full text searching too, if you get glimpse or whatever.
Of course, the interface to LXR is a web browser, which makes it less than ideal if you consider that it isn't integrated into an IDE, but for the purpose of tracing/searching large amounts of code, it's still pretty useful.
ash
codeviz (Score:5, Informative)
http://www.csn.ul.ie/~mel/projects/codeviz/ [csn.ul.ie]
One excellent option... (Score:3, Informative)
SciTe (Score:2, Informative)
Re:Nothing Can Beat a Good Editor (Score:5, Informative)
It has a very simple interface that looks like the original notepad, it does syntax coloring for two dozen different languages and file formats, shows bracket matching, adds line numbers, word wrap features, support for UNIX- and mac-style line terminations, regexps, and is in general what notepad itself should have been back in the 1990s. Plus, it's freeware. What more could you want?
Not really a browser, but helpful (Score:3, Informative)
http://www.stack.nl/~dimitri/doxygen/ [stack.nl]
Re:Nothing Can Beat a Good Editor (Score:3, Informative)
Understand from Scitools (Score:2, Informative)
One of the things I like most, is that it also colours all parts of the code that is #ifdef'ed out. Another thing is that the information windows for any token displays all kind of information: calls, callees, references, uses (including sets/get/modifies), used locals, used globals, exposed globals etc - all of which in a tree view, so it is very easy to decide what's important and what's not.
It is possible to use it as an editor as well, which I do, but as such it isn't perfect.
Also, importing a completely new project requires almost no intervension - it will simply prompt for where any missing #includes are located and add them to the searchpath, so just setting it up for a quick test is done in no-time.
SourceNavigator (Score:2, Informative)
Re:Nothing Can Beat a Good Editor (Score:3, Informative)
Re:Nothing Can Beat a Good Editor (Score:1, Informative)
Tools I have used, GNU Global & NCC (Score:2, Informative)
I have sometimes used GNU Global [gnu.org] which makes indexed html pages of the code. Somewhat similar to lxr but there is no setup, just run two commands, gtags and htags. One nice thing about global is that it can be used on any incomplete subset of a software system. Want to just look at the files in the drivers/net/wireless directory in the linux kernel tree? Fine, just run gtags and htags from that directory (and no other setup is necessary).
I have also used NCC [upatras.gr] which "compiles" each file and makes a index file with information like "function AAA calls functions BBB, CCC and DDD, reads variables EEE, writes variables FFF and GGG". The format is not exactly like that but you get the idea. NCC includes a text mode gopher-like variable usage/function call browser and there is a script to make graphical call graphs (via dot from graphviz). At work I have also used information from ncc files in combination with with information from the map file to find maximum stack usage.
This study [psu.edu] (which I just found while writing this) seems to have an interesting analysis of this topic.
Source Navigator (Score:3, Informative)
Re:Nothing Can Beat a Good Editor (Score:3, Informative)
On my personal system, emacs in text mode loads before I'm ready to edit the file, which is all I can ask for, and it's still the fastest XWindows editor I can open. It may be "heavier" than other editors based on GTK or QT, but it seems GTK and QT aren't necessarily "light" themselves, so my emacs will be up way before even lightweight things like GEdit.
I think calling emacs "heavy" now is just inertia from the era of 1MB machines. If emacs is heavy, than so is damn near every app I run and that's not a very useful definition if it never distinguishes between anything.
Try Agent Ransack (freeware) (Score:1, Informative)