Comment puis-je faire le suivi des appels de méthodes en Java?
Considérer les deux simples classes Java ci-dessous:
Premier Exemple
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();
}
}
Deuxième Exemple
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...");
}
}
Après le programme de fonctionner, comment puis-je trace (1) qui a pour objet d'appeler la méthode (2) et combien de fois?
Juste une petite précision, j'ai de 100 classes et 1000s des objets de chacun d'eux demandant 100s de méthodes. Je veux être en mesure de tracer (après je lance le programme), l'objet qui appelle la méthode et combien de fois.
Merci pour toute suggestion.
Tu demandes plus complexes ou des exemples généraux? À partir de cet exemple, il serait évident, puisque vous n'avez qu'une seule instance de chaque classe et il n'y a pas d'héritage.
Je suis à la recherche d'une réponse pour une utilisation dans n'importe quelle situation. Je pourrais avoir 100 classes et 1000s des objets de l'appel de chaque 100s de méthodes. Je veux être en mesure de tracer (après je lance le programme), l'objet qui appelle la méthode et combien de fois. Merci George
Merci, je suis nouveau ici. Je pourrais avoir pas bien compris la mise en forme du code.
Je viens de faire la mise en forme, maintenant, il semble ok. Merci pour l'astuce de laisser 4 espaces.
Je suis à la recherche d'une réponse pour une utilisation dans n'importe quelle situation. Je pourrais avoir 100 classes et 1000s des objets de l'appel de chaque 100s de méthodes. Je veux être en mesure de tracer (après je lance le programme), l'objet qui appelle la méthode et combien de fois. Merci George
Merci, je suis nouveau ici. Je pourrais avoir pas bien compris la mise en forme du code.
Je viens de faire la mise en forme, maintenant, il semble ok. Merci pour l'astuce de laisser 4 espaces.
OriginalL'auteur george24 | 2015-04-01
Vous devez vous connecter pour publier un commentaire.
Il imprime une ligne pour chaque appel de méthode, de tous les objets dans toutes les discussions:
Et
Vous pouvez utiliser un appel traceur comme housemd btrace inTrace
Pour plus impliqué l'analyse, vous pouvez utiliser un graphe d'appel de l'utilitaire comme l'un d'eux:
javashot
java-callgraph
(voici un l'article sur le sujet)
Les méthodes obsolètes ci-dessus sont prévus pour la suppression, parce qu'il y a maintenant JVM-alternatives spécifiques:
Ces deux outils assez facile de configurer et commencer à recueillir des informations et d'avoir de belles interfaces GUI. Qu'ils attachent à l'exécution d'un processus de JVM et permettre aperçu de threads et de divers autres types de diagnostic (Visual VM a un grand nombre de plugins, mais qui peut prendre un certain temps à les trier, de les configurer et de les comprendre, si vous voulez aller au-delà de comportement par défaut, alors que JFR est instrumenté avec plus par défaut).
Aussi, ne pas sous-estimer l'utilité de la JVM distribué des utilitaires de ligne de commande (
$JAVA_HOME/bin
), pour l'exécution de certains facilement accessible diagnostics.traceInstructions()
est deprecated à partir avec Java 9.Aussi, notez que ces méthodes ne sont pas seulement obsolète, mais transformé en un no-op ainsi, afin que les utilisateurs doivent chercher des solutions de rechange lors de la migration de JDK 9.
Remarque, il semble
traceInstructions()
rarement travaillé, même avec de vieilles machines virtuelles. J'ai essayé avec plusieurs (6, 7, 8), en vain. Cela correspond à de nombreux autres rapports, par exemple: stackoverflow.com/a/1025685/7256341OriginalL'auteur clearlight
OriginalL'auteur gavenkoa