Consider the two simple Java classes below:
First Example
class Computer {
Computer() {
System.out.println("Constructor of Computer class.");
}
void On() {
System.out.println("PC turning on...");
}
void working() {
System.out.println("PC working...");
}
void Off() {
System.out.println("PC shuting down...");
}
public static void main(String[] args) {
Computer my = new Computer();
Laptop your = new Laptop();
my.On();
my.working();
your.On();
your.working();
my.Off();
your.Off();
}
}
Second Example
class Laptop {
Laptop() {
System.out.println("Constructor of Laptop class.");
}
void On() {
System.out.println("Laptop turning on...");
}
void working() {
System.out.println("Laptop working...");
}
void Off() {
System.out.println("Laptop shuting down...");
}
}
After the program run, how do I trace (1) which object call which method (2) and how many times?
Just a little precision, I might have 100 classes and 1000s of objects each of them calling 100s of methods. I want to be able to trace (after I run the program), which object called which method and how many times.
Thanks for any suggestion.
Tracing for Java Plug-in and Java Web Start can be turned on by setting the property deployment. trace property to true . This property turns on all tracing facilities inside Java Plug-in and Java Web Start. To enable more fine-grained tracing, the deployment.
The MethodCall operator is used to call an arbitrary Java method using the Java reflection API. Two forms of method call are supported, static and instance level. For static method calls Input 1 should be set to null and Inputs 2,3,4 are required.
To call a method in Java, write the method name followed by a set of parentheses (), followed by a semicolon ( ; ). A class must have a matching filename ( Main and Main. java).
The "this" keyword in Java is used as a reference to the current object, within an instance method or a constructor. Yes, you can call methods using it.
This prints a line for each method call of all objects in all threads:
Runtime.traceMethodCalls() (deprecated / no-op in Java 9)
And
Runtime.traceInstructions (deprecated / no-op in Java 9)
You can use a call tracer like housemd or btrace or inTrace
For more involved analysis, you can use a call graph utility like one of these:
javashot
java-callgraph
(here is an article on the subject)
The deprecated methods above are slated for removal, because there are now JVM-specific alternatives:
Both of those tools pretty easy to setup and start collecting information and have nice GUI interfaces. They attach to a running JVM process and allow for thread snapshots and various other kinds of diagnosis (Visual VM has a lot of available plugins but that can take awhile to sort through to configure and understand, if you want to go beyond default behavior, whereas JFR is instrumented with more by default).
Also, don't underestimate the usefulness of JVM distributed command line utilities ($JAVA_HOME/bin
), for performing some easily accessible diagnostics.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With