Hi.
When I receive a large project, I like to use static analysis tools. Most run by looking at the source code and then produce call trees and other interesting tables and lists -- who calls whom, who is called by whom, etc.
Looking for "static analysis tools" with Google yields about 1.5 M hits.
One of the first,
http://www.spinroot.com/static/ , has a list of tools with links to commercial and academic tools.
Depending on your expertise, you could also use the tools in *nix, such as
nm (namelist), along with some glue-programs (in awk, perl, etc) to extract symbols from object modules to produce cross-reference lists, call trees, etc. The advantage of that is the compilers do all the work, and the tools are general because they don't need to look at the source so they can process any language. You can see this approach by compiling a small c program, then run nm on the .o file. Briefly, you'd get a
transfer address, say "main", so you know where to start, then perhaps an
undefined, such as "printf", so you know that main calls printf:
Code:
% nm main.o
00000000 T main
U printf
or, with posix output:
Code:
main.o: main T 00000000 0000001e
main.o: printf U
That's essentially the call tree, and a program that processes the nm output could produce a list that shows the line / reference number and level:
Code:
1 ( 0) main
2 ( 1) printf
Best wishes ... cheers, makyo
( edit 1: typo, add example output )