I'd like to analyze and understand a certain Java app and I think a call graph would be very useful. How do I generate one? I'm using Eclipse.
Getting callstack
1) If you can debug the application simply put a breakpoint (double click over the left margin of the code) and wait it to stop. Go to Debug Perspective if you're not there, and open the Call stack View/Panel. It has the call stack :)
2) If you want to print this stack trace somewhere use an Exception:
Exception aux = new Exception("I'm here"); // not for throwing!
aux.printStackTrace(); // if you want it in stdout
or
Exception aux = new Exception("I'm here"); // not for throwing!
StringWriter sw = new StringWriter();
aux.printStackTrace(new PrintWriter(sw));
String result = sw.toString(); // if you want it in a string
Obtaining method references
You can obtain all references to a method by right-clicking, References, Workspace. It will search all callings in your current open projects. Very very useful.
Profiling an app
(thanks those who had answered the profiler option)
Eclipse TPTP provides profiling:
http://www.eclipse.org/tptp/home/project_info/general/whatisTPTP.php