views:

117

answers:

2

Suppose I have a big program that consists of hundreds of methods in it. And according to the nature of input the program flow is getting changed.

Think I want to make a change to the original flow. And it is big hassle to find call hierarchy/ references and understand the flow.

Do I have any solution for this within Eclipse? Or a plugin? As an example, I just need a Log of method names that is in order of time. Then I don't need to worry about the methods that are not relevant with my "given input"

Update : Using debug mode in eclipse or adding print messages are not feasible. The program is sooooo big. :)

+3  A: 

You could use AspectJ to log the name of all methods called without changing your original program.

See tracing for instance.

aspect SimpleTracing {
    pointcut tracedCall():
        call(void FigureElement.draw(GraphicsContext));

    before(): tracedCall() {
        System.out.println("Entering: " + thisJoinPoint);
    }
}
VonC
+1  A: 

If all you want to know is what methods got called, rather than the precise order, you might consider using a test coverage tool. These tools instrument the source code to collect "this got executed" facts at various degrees of granularity (method call only, and/or every code block controlled by a conditional).

The SD Test Coverage Tool is a tool that will do this.

It won't collect the call graph or even the order of the calls.

If you want more control over the instrumentation, you can consider using the DMS Software Reengineering Toolkit. DMS will parse, transform, and prettyprint Java in arbitrary ways controlled by custom source-to-source program transformation rewrite rules. It would be easy to insert logging transformations into the start and exit of each method (and in fact this is almost exactly how the SD test coverage tool works). Given the raw enter-X and exit-X data, constructing the runtime call tree is a straightforward task.

Ira Baxter