9
votes

Comment tracer des événements JavaScript (trace de pile)?

Dans n'importe quel langage de programmation, je peux tracer n'importe quelle fonction et savoir quelle fonction est appelée par d'autres. Mais à JavaScript, je ne sais pas comment, puisque le code n'est pas écrit par moi et Firebug ne donne pas cette fonctionnalité - autant que je sache.

un exemple:

Je veux afficher les noms de fonction de chaque fonction appelée lorsque vous cliquez sur l'élément XYZ et les afficher dans l'ordre.


0 commentaires

6 Réponses :


0
votes

DYNATACE AJAX a certaines des fonctionnalités comme ça. Pas exactement ce que vous recherchez, mais vous donne les événements et les fonctions liés sur un élément et aide votre dépannage. Avait un téléchargement gratuit, vérifiez-le.


0 commentaires

3
votes

Vous pouvez voir la trace de la pile d'une erreur avec la pile pile () Appel de fonction (sur Firefox). Créer une fonction simple pour imprimer une trace de pile pourrait ressembler à ceci: xxx

Autres navigateurs ont des moyens différentes d'imprimer la trace de la pile, mais cela devrait vous obtenir ce dont vous avez besoin pour Firefox.

J'espère que cela aide.


1 commentaires

Cela devrait être au moins sur Firefox 3.6.6



10
votes

trouvé ceci: une structure JavaScript dans n'importe quel navigateur strong> a>, James dit qu'ils ont un GITUB compte maintenant

function printStackTrace() {
  var callstack = [];
  var isCallstackPopulated = false;
  try {
    i.dont.exist+=0; //doesn't exist- that's the point
  } catch(e) {
    if (e.stack) { //Firefox
      var lines = e.stack.split('\n');
      for (var i=0, len=lines.length; i<len; i++) {
        if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
          callstack.push(lines[i]);
        }
      }
      //Remove call to printStackTrace()
      callstack.shift();
      isCallstackPopulated = true;
    }
    else if (window.opera && e.message) { //Opera
      var lines = e.message.split('\n');
      for (var i=0, len=lines.length; i<len; i++) {
        if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
          var entry = lines[i];
          //Append next line also since it has the file info
          if (lines[i+1]) {
            entry += " at " + lines[i+1];
            i++;
          }
          callstack.push(entry);
        }
      }
      //Remove call to printStackTrace()
      callstack.shift();
      isCallstackPopulated = true;
    }
  }
  if (!isCallstackPopulated) { //IE and Safari
    var currentFunction = arguments.callee.caller;
    while (currentFunction) {
      var fn = currentFunction.toString();
      var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf('')) || 'anonymous';
      callstack.push(fname);
      currentFunction = currentFunction.caller;
    }
  }
  output(callstack);
}

function output(arr) {
  // Output however you want
  alert(arr.join('\n\n'));
}


1 commentaires

Il convient de noter qu'ils ont un site github maintenant, github.com/eriwen/javascript-stacttactrace



0
votes

Si vous souhaitez simplement déboguer votre code, votre meilleure option consiste à obtenir un plug-in de débogueur pour votre navigateur. Le plug-in Firebug fournit des traces de pile. ( voir ici )

Si vous souhaitez le faire à partir de votre code, il n'y a pas de fonctionnalité de langue standard de JavaScript qui vous permet de le faire. Différents navigateurs mai implémentent des extensions non standard, mais vous ne devriez pas compter sur eux.


0 commentaires