2010-07-12 4 views
4

J'écris actuellement un programme dans lequel je voudrais accéder aux noms de variables de variables locales pendant l'exécution d'un programme et les transmettre de manière externe. Je suis conscient que Java va vider les noms des variables locales pendant la compilation, sauf s'il est compilé en mode debug. Après avoir regardé autour de certains, il semble que JDI/JPDA est la voie à suivre pour ce genre de travail. En supposant ref fait référence à un ThreadReference, ce qui suit est ce que j'ai jusqu'ici:Java Accès aux noms de variables locales

ref.suspend(); 
StackFrame currentFrame = ref.frame(0); 
List<LocalVariable> vars = currentFrame.visibleVariables(); 
ref.resume(); 

Deux questions:

  1. Suis-je sur la bonne voie, ou est-il une meilleure façon de le faire? Comment puis-je acquérir le ThreadReference pour définir ref? LocatableEvent semble être ce dont j'ai besoin, mais quelqu'un peut-il donner un exemple sur la façon de l'utiliser?

Merci beaucoup d'avance!

+4

Pourquoi, oh Pourquoi? Quelle est la raison possible pour interroger la variable locale * noms * d'une méthode en cours? –

+0

Outil de débogage - Je voudrais passer les variables à un REPL d'un Lisp pour une évaluation/manipulation plus poussée. C'est plus simple ici, mais si l'utilisateur passe de nombreuses variables, il devra spécifier quels sont les noms de toutes ces variables ou traiter des noms de variables différents dans le REPL. –

+0

Copie possible de [créer un débogueur simple avec jdi pour définir des points d'arrêt et récupérer la valeur d'une variable] (https://stackoverflow.com/questions/47939691/build-a-simple-debugger-with-jdi-to-set -breakpoints-and-retrieve-the-value-of-a) –

Répondre

1

Peu de gens ont de l'expérience avec ce genre de choses.

Rechercher un autre emplacement J'avais des liens vers le code mais ils ne le sont plus. Impossible de supprimer cette réponse, car elle a été acceptée.

+0

On dirait que c'est le meilleur que je vais obtenir ... :) Merci pour l'info, mais j'ai trouvé les docs JDPA d'être très confus. –

+0

semble que le lien est cassé, pouvez-vous le réparer? @Romain –

0

Oui, vous êtes sur la bonne voie!

Pour tous ceux qui veulent essayer de commencer avec le JDI, l'exemple « Trace » est une valeur inestimable:

http://www.docjar.com/docs/api/com/sun/tools/example/trace/package-index.html

Il est une épine dorsale utilisable. Il vous montre comment utiliser les événements, ce qui vous donnera un ThreadReference. Il vous montre également comment démarrer la seconde machine virtuelle par programmation.

Questions connexes