Slashdot Mirror


Source Code Browsing Tools?

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?

18 of 165 comments (clear)

  1. A couple of options by plover · · Score: 5, Informative
    If you're looking for really lightweight, run the code through a prettyprinter first. Pick the style you can most easily read. For example, I personally don't like K&R style, but that's entirely up to you.

    If you're looking more for documentation of existing code, doxygen 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.

    --
    John
  2. OpenGrok by Lucractius · · Score: 4, Informative

    the opensolaris code browser is built off a bunch of open source stuff.

    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/

    --
    XML - A clever joke would be here if /. didn't mangle tag brackets.
  3. Krugle by WeAzElMaN · · Score: 2, Informative

    If I'm looking at third-party code (instead of my own), I like to use Krugle. It's still in beta and I was lucky enough to get a beta invite, but it's an extremely powerful tool for searching through repositories and documentation.

  4. LXR by ashridah · · Score: 2, Informative

    I've always considered stuff like LXR (linux cross reference) to be good for this kind of thing.

    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

  5. codeviz by meowsqueak · · Score: 4, Informative

    You can make some useful call graphs with codeviz + graphviz. I sometimes find this useful for tracing the heirarchy of abstraction through a set of C source files.

    http://www.csn.ul.ie/~mel/projects/codeviz/

  6. One excellent option... by dracken · · Score: 2, Informative

    ..is Redhat Sourcenavigator . You can look at class hierarchy, static call graphs, jump to function declarations/definitions/callsites. Try it out.

  7. SciTe by stony3k · · Score: 2, Informative

    I prefer to use SciTe - it's really lightweight - supports code folding, syntax highlighting and it's open source.

    --
    Freedom is not worth having if it does not include the freedom to make mistakes. - Mahatma Gandhi
  8. Re:Nothing Can Beat a Good Editor by plover · · Score: 4, Informative
    For windows, I've completely replaced "notepad.exe" with "notepad2.exe" And when I say completely, I mean I crawled through my system registry editing every occurrance of "notepad.exe" to "notepad2.exe". Shell opens, file associations, defaults of every sort use it. I love it. And unless someone using the computer is particularly observant, they don't even notice it's not the original notepad.

    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?

    --
    John
  9. Not really a browser, but helpful by Klowner · · Score: 2, Informative

    I've found Doxygen to be pretty handy, it'll output to a bunch of HTML files and even create nifty relationship graphs for OO languages like C++

    http://www.stack.nl/~dimitri/doxygen/

  10. Re:Nothing Can Beat a Good Editor by b17bmbr · · Score: 2, Informative

    or, you could have copied the executable to C:\windows and renamed it notepad.exe. it sucks that windows doesn't use symlinks though. would make it a whole lot easier. but then again, isn't that the point of windows, making what need to do impossible, everything you don't want to do easy.

    --
    My problem? I was perfectly gruntled, until some numbnuts came by and dissed me.
  11. Understand from Scitools by Flu · · Score: 2, Informative
    I regulary use Understand C/C++ from SCITools (is available for Java and other languages) to browse source code (in my case, embedded sources that is supposed to be compiled using the Keil compiler). It's "right-click, for information" attetude makes browsing around a breeze. The reason is that it builds an internal database when loading the project (which takes a second or a few, depending on the size of the sources), and once built, the interface is astonishingly fast!

    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.

  12. SourceNavigator by schlenk · · Score: 2, Informative

    You could also take a look at SourceNavigator at http://sourcenav.sourceforge.net/index.html.

  13. Re:Nothing Can Beat a Good Editor by dolmen.fr · · Score: 2, Informative

    Notepad.exe is both in %WINDIR% and %WINDIR%\System32 and as the other poster pointer, it is a hard task to replace them in XP due to system file protection.

  14. Re:Nothing Can Beat a Good Editor by Anonymous Coward · · Score: 1, Informative
    ATTRIB -S %WINDIR%\NOTEPAD.EXE
    I've not really used XP, but if the guy can edit the registry then I'd wager he can do the above. Am I missing something here?
  15. Tools I have used, GNU Global & NCC by ZorroXXX · · Score: 2, Informative
    Lxr is good for browsing "static" code like the different linux releases. But as a tool for browsing arbitrary source code it is too cumbersome to set up and use.

    I have sometimes used GNU Global 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 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 (which I just found while writing this) seems to have an interesting analysis of this topic.

    --
    When you are sure of something, you probably are wrong (search for "Unskilled and Unaware of It").
  16. Source Navigator by avdi · · Score: 2, Informative

    Source Navigator is the perhaps the most amazingly useful freebie I've ever downloaded. It's absolutely indispensible for making sense of large C/C++ codebases (and it has some support for other languages too). The cross-referencing ability is particularly useful; it's great to be able to call up a graphical call-tree of any function.

    --

    --
    CPAN rules. - Guido van Rossum
  17. Re:Nothing Can Beat a Good Editor by Jerf · · Score: 2, Informative

    emacs used to be a heavy editor. But "heavy" is a relative term. In an era where people will open Eclipse to edit a file, is emacs really heavy anymore? Probably not. Most of the features people will complain about like news reader, etc., are loadable modules anyhow and who cares what modules the program might load?

    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.

  18. Try Agent Ransack (freeware) by Anonymous Coward · · Score: 1, Informative

    There's a useful product called Agent Ransack that I use all the time to search through source code either for variable/member references or for common coding errors (e.g. '=' instead of '=='). http://www.mythicsoft.com/agentransack. Also supports regular expressions.