IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

Créer un objet dynamiquement avec JDI


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Par défaut Créer un objet dynamiquement avec JDI
    Bonjour,

    J'essaye d'écrire un "runtime" java qui contrôlera l'exécution d'un programme quelconque. Dans le contexte d'exécution un objet peut ne pas être défini en mémoire alors qu'il devrait l'être. J'utilise donc JDI pour attrapper les NullPointerException (définies blocantes pour la jvm cible), et je voudrais alors :
    - récupérer l'identifiant de l'objet ayant déclenché l'exception (j'ai l'impression qu'il n'existe pas de moyen simple pour faire ça, à part passer par la "location" de l'exception et de parser le bytecode pour y trouver les variables)
    - vérifier que cet objet "devrait" être défini et sa valeur (ça c'est le but du runtime, pas une question )
    - instancier l'objet et lui donner sa valeur théorique
    - relancer l'exécution

    J'ai essayé avec un simple String, connu à l'avance (j'élimine ainsi la première question pour le moment), mais si en pratique ça fonctionne avec le debugger de NetBeans (on peut donner une valeur au String puis appeler une méthode dessus sans déclencher d'exception) avec mon programme ça ne marche pas.

    Mon code ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // getting variables
            List<LocalVariable> vars = stack.visibleVariables();
            for (Iterator it = vars.iterator(); it.hasNext();) {
                  LocalVariable elem = (LocalVariable) it.next();
                  System.out.println(elem);
                  System.out.println("value is "+stack.getValue(elem));
                  if (elem.name().equals("s")){
                        StringReference v = vm.mirrorOf("Inserted String | ");
                        stack.setValue(elem,v);
                  }
            }
            LocalVariable s = stack.visibleVariableByName("s");
            System.out.println("Value is now: "+stack.getValue(s));
    La valeur de s affichée est bien la bonne ("Inserted String |"), mais le resume() de la jvm cible m'affiche quand même un NullPointerException et quitte.

    Quelqu'un connait la marche à suivre ? Je suis un peu perdu là...

    Merci

  2. #2
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Par défaut
    Ah, apparemment j'ai un autre soucis. J'avais mal mené mes tests avec Netbeans. En fait j'ai le même comportement une fois l'exception levée. Donc mon problème serait plutôt d'ignorer une Exception déjà levée par la jvm cible... Je ne trouve pas l'info non plus dans la doc JDI...

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/08/2007, 14h17
  2. Réponses: 2
    Dernier message: 05/02/2007, 09h12
  3. Réponses: 2
    Dernier message: 17/11/2006, 07h29
  4. Créer un objet dynamiquement
    Par soad dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 08/11/2005, 14h03
  5. [DisplayTag] Créer un lien dynamique avec javascript
    Par babylone7 dans le forum Taglibs
    Réponses: 3
    Dernier message: 20/04/2005, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo