views:

268

answers:

5

First time poster. 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. Thanks.

+2  A: 

Using the Eclipse Profiler might get you what you want.

duffymo
That project is overriden by Eclipse TPTP. I'll add its link to my answer (but I'll +1 yours)
helios
+1  A: 

Fast and dirty, create a new exception and print the stacktrace.

Exception e = new Exception();
e.printStackTrace();
HeDinges
I think he's looking to visualize the data, not just get the stack trace.
Kristopher Ives
@Kristopher Then it's a debugger that he really needs.
HeDinges
A: 

I use the Eclipse profiler sometimes.

Kristopher Ives
+5  A: 

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%5Finfo/general/whatisTPTP.php

helios
There's also a `Thread#dumpStack()` which is preferred above `new Exception()`.
BalusC
Thanks guys. I used TPTP which it not bad for my purposes.
+3  A: 

Netbeans profiler is very good for this !!

The profiling functions include CPU, memory and threads profiling as well as basic JVM monitoring ...

You can also use jconsole command (part of the jdk)

It launches a graphical console tool that enables you to monitor and manage Java applications and virtual machines on a local or remote machine.

wj