Java如何跟踪被调用的函数(Java, how to trace functions called)

我想跟踪Java中调用的函数的开始[和结尾],如下面的代码所示:

public void foo() { System.out.println("begin of foo()"); ... System.out.println("e-n-d of foo()"); }

但是转储代码System.out.println维护是乏味和容易出错的,因为在一个类中可能会有几十个函数。

任何好主意都可以缓解这项工作? 我不想在整个文件中使用转储语句。

执行开始和结束两个或一个痕迹是perferd。 但是,如果不可能,那个函数被调用的记录也是有帮助的。 我的意思是不关心确切的beginnig和结束,只是告诉函数已被调用。

I want to trace the beginning [& ending] of functions called in Java, like the following code:

public void foo() { System.out.println("begin of foo()"); ... System.out.println("e-n-d of foo()"); }

But maintaining of the dump code System.out.println is something tedious and error-prone, for there may be tens of thounds of function in an class.

Any good idea can ease this work? I don't want dump statements all over the file.

Implementation of both or one of the beginning & ending traces is perferd. But, if impossible, recordings of that the function has been called is also helpful. I mean not care the exact beginnig and ending, just tell that the function has been called.

最满意答案

最简单的方法就是你选择的方法。

一个简单的替代System.out调用将使用日志框架。 然后,您可以根据选定的“日志记录级别”打开和关闭信息

更复杂的解决方案将使用面向方面的编程技术(例如由AspectJ提供),但是这会让您陷入陡峭的学习曲线。

也许一种基于工具的方法可以满足您的需求:所谓的“分析器”可以“检测”您的代码并准确报告运行期间调用哪种方法。

The easiest approach is the one you've chose.

An easy replacement for the System.out calls would be using a logging framework. Then you could switch the information on and off according to a selected "logging level"

More sophisticated solutions would use aspect oriented programming techniques (provide by AspectJ, for instance), but this puts you on a steep learning curve.

Maybe a tool-based a approach fits your needs: so called "profilers" can "instrument" your code and report exactly which method was called during a run.

Java如何跟踪被调用的函数(Java, how to trace functions called)

我想跟踪Java中调用的函数的开始[和结尾],如下面的代码所示:

public void foo() { System.out.println("begin of foo()"); ... System.out.println("e-n-d of foo()"); }

但是转储代码System.out.println维护是乏味和容易出错的,因为在一个类中可能会有几十个函数。

任何好主意都可以缓解这项工作? 我不想在整个文件中使用转储语句。

执行开始和结束两个或一个痕迹是perferd。 但是,如果不可能,那个函数被调用的记录也是有帮助的。 我的意思是不关心确切的beginnig和结束,只是告诉函数已被调用。

I want to trace the beginning [& ending] of functions called in Java, like the following code:

public void foo() { System.out.println("begin of foo()"); ... System.out.println("e-n-d of foo()"); }

But maintaining of the dump code System.out.println is something tedious and error-prone, for there may be tens of thounds of function in an class.

Any good idea can ease this work? I don't want dump statements all over the file.

Implementation of both or one of the beginning & ending traces is perferd. But, if impossible, recordings of that the function has been called is also helpful. I mean not care the exact beginnig and ending, just tell that the function has been called.

最满意答案

最简单的方法就是你选择的方法。

一个简单的替代System.out调用将使用日志框架。 然后,您可以根据选定的“日志记录级别”打开和关闭信息

更复杂的解决方案将使用面向方面的编程技术(例如由AspectJ提供),但是这会让您陷入陡峭的学习曲线。

也许一种基于工具的方法可以满足您的需求:所谓的“分析器”可以“检测”您的代码并准确报告运行期间调用哪种方法。

The easiest approach is the one you've chose.

An easy replacement for the System.out calls would be using a logging framework. Then you could switch the information on and off according to a selected "logging level"

More sophisticated solutions would use aspect oriented programming techniques (provide by AspectJ, for instance), but this puts you on a steep learning curve.

Maybe a tool-based a approach fits your needs: so called "profilers" can "instrument" your code and report exactly which method was called during a run.