Finding the actual runtime call tree of a Java Program

三世轮回 提交于 2019-12-30 03:37:11

问题


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. :)


回答1:


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);
    }
}



回答2:


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.



来源:https://stackoverflow.com/questions/2582890/finding-the-actual-runtime-call-tree-of-a-java-program

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!