Question

Je voudrais code JavaScript instrument pour « log » valeurs des variables globales. Par exemple, je voudrais savoir toutes les valeurs d'une variables particulières foo avait en cours d'exécution. L'exploitation forestière est pas le problème.

Quelle serait la meilleure façon de mettre en œuvre ce? Je pensais à l'aide Rhino (la mise en œuvre JavaScript Java créé par Mozilla) pour générer un AST et la modification de cette AST.

Était-ce utile?

La solution 7

En utilisant la version cvshead de Rhino, j'instrumenté le code.

Autres conseils

Si vous n'êtes pas limité à Rhino / Java, le joyau Ruby Johnson intègre l'interpréteur SpiderMonkey / TraceMonkey en Ruby. Il ne donne accès à l'AST. Je ne l'ai pas essayé de modifier l'AST; ne sais pas si cela est possible (il pourrait être, à en juger par les noms dans le code à regarda).

Le joyau Johnson est dans le repo Johnson à github de jbarnette. (Switch id, Stackoverflow ne veut pas mettre des liens dans à ce point ...) J'ajouté le support de TraceMonkey récemment et il est pas encore intégré dans la source principale. Il est dans mes (smparkes) 's repo Johnson sur GitHub.

Cela peut être ce que vous cherchez:

http://ejohn.org/blog/javascript-getters-and- poseurs /

Mettre un journal dans le compositeur et c'est tout. Bien sûr, je ne sais pas où cela ne fonctionne effectivement, si elle doit être un code de confiance ou une page Web, ou quoi.

D'après le code de John Resig, je voudrais ajouter à mon code de débogage quelque chose comme:

var placeLoggerInSetter = function(variableName, obj){ //obj may be window
    obj.__defineSetter__(variableName, function(val){
         console.log(val); //log whatever here
         obj[variableName] = val;
    });
}

var something = 0;
placeLoggerInSetter("something", window);
something = 1;
//out goes "1" in the console
something = 2
//out goes "2" in the console

est-ce mieux comme ça? Encore une fois, je ne l'ai pas testé et la ligne de obj[variableName] semble assez récursive pour moi ... vous dire ici si cela fonctionne? :)

En outre, avec Firebug ,

console.dir(obj)

vous permettra de voir toutes les propriétés de cet objet dans la console, au lieu de le convertir en chaîne comme avec log(). Et aussi développer les propriétés et ainsi de suite. Handy.

Firebug (plugin pour Firefox) a une fonction d'enregistrement, auquel vous pouvez écrire sur une console. Beaucoup mieux que d'utiliser alert ( "foo"); pour tout

exemple relevé de journal:

console.log("foo="+foo);

Voir ce message pour plus d'informations (y compris l'utilisation plus avancée)

Je ne sais pas pour une solution générique ou tout ce qui existe, mais simplement envelopper ces variables autour d'une classe d'exploitation forestière qui traite get / jeux et des choses.

Vous pouvez définir débogueur; comme première chose sur le document d'événement prêt et à quelques pas seulement par votre étape de code pas à pas.

.. fredrik

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top