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:
- 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éfinirref
? 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!
Pourquoi, oh Pourquoi? Quelle est la raison possible pour interroger la variable locale * noms * d'une méthode en cours? –
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. –
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) –