Jak sledovat události Javascriptu (Stack Trace)?

V jakémkoli programovacím jazyce mohu vysledovat jakoukoli funkci a vědět, která funkce je volána jinými. Ale v JavaScriptu nevím jak, protože kód nepíšu já a Firebug tuto funkci neposkytuje – pokud vím.

Příklad:

Chci zobrazit názvy funkcí každé funkce, která se volá po kliknutí na prvek XYZ, a zobrazit je v pořadí.

Odpověď

Nalezeno toto:Stacktrace javascriptu v libovolném prohlížeči , James říká, že nyní mají účet github

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('nn'));
}