0
votes

Génération d'un diagramme d'appel de méthode dans un projet Java

J'ai un code source d'un projet java et je veux tracer pour chaque méthode, quelle méthode appelée à l'intérieur de cette méthode.

exemple:

main
|_foo2
  |_bar
  |_bar2
    |_bar

le résultat sera comme:

foo(){}
bar(){}
bar2(){
   bar();
}
foo2(){
   bar();
   bar2();
}

main(){
   foo2();
}

tous les add-ons ou plug-ins sont d'accord et comme il s'agit d'un projet interne d'une entreprise, j'espère que les outils sont hors ligne. Pour le résultat, il n'est pas nécessaire que ce soit comme ça, un graphique ou quoi que ce soit, ça va.

Ajout d'informations:

  1. Je ne peux pas modifier le code
  2. Je ne peux pas exécuter le code
  3. mais (peut-être) je peux les ajouter à l'IDE Eclipse
  4. Le projet est de type WAR, EAR ou JAR


1 commentaires

Êtes-vous capable de changer le code de ces méthodes?


4 Réponses :


0
votes

S'il s'agit d'un projet Java pur sans autre framework, une façon de le faire serait d'utiliser AspectJ pour intercepter chaque méthode, et de mettre une entrée dans Thread local map pour le nom de la méthode au compteur + 1. Si main vaut 0, foo2 vaut 1, bar et bar2 vaut 2, et ainsi de suite. Consultez cette section de la documentation AspectJ. < / p>


1 commentaires

le problème principal est que je ne peux pas exécuter le code



0
votes
  • Tout ce dont vous avez besoin est d'utiliser le compilateur ajc au lieu de javac . Cela vous permet d'utiliser AspectJ . En utilisant les aspects, vous pouvez définir Pointcut et enregistrer ce dont vous avez besoin.
  • Une autre option, je pense, pourrait être d'analyser une stacktrase après tous les appels.

0 commentaires

1
votes

Premièrement, si vous utilisez Eclipse comme IDE, vous pouvez faire un clic droit sur une méthode et choisir "ouvrir la hiérarchie des appels" puis eclipse montre toutes les méthodes qui appellent la méthode sélectionnée et toutes les méthodes qui sont appelées à partir de la méthode sélectionnée.

Deuxièmement, nous pouvons la trouver par programmation.

c'est-à-dire en utilisant les classes internes du JDT eclipse , ce sont les mêmes classes utilisées par eclipse pour montrer qui appelle la méthode.

Au départ, nous devons importer ci-dessous deux classes,

    import org.eclipse.jdt.internal.corext.callhierarchy.CallHierarchy;

    import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper;

Et ensuite Create une méthode pour obtenir des appelants, et qui prend la méthode sélectionnée comme entrée. (veuillez noter que ce sera votre méthode de type API) vous devriez appeler cette méthode à partir de votre programme pour trouver quelles méthodes appellent quoi ..

p >


0 commentaires

0
votes

Vous pouvez utiliser un plugin comme Code Iris d'IntelliJ


3 commentaires

Code Iris fournit un graphique correct, mais quand je le vois, le graphique semble très compliqué hahah


Code Iris est utile lorsque vous avez affaire à une grande base de code. Pour "hello world", vous pouvez utiliser Eclipse comme IDE, puis vous pouvez faire un clic droit sur une méthode et choisir "ouvrir la hiérarchie des appels". Cela peut servir votre objectif. Il existe d'autres logiciels comme "Source Insight" qui répondront également à vos besoins.


est-ce que ça va si le code source est dans le pot ou l'oreille ou autre chose?