console.trace()
affiche son résultat sur la console.
Je veux obtenir les résultats sous forme de chaîne et les enregistrer dans un fichier.
Je ne définis pas les noms des fonctions et je ne peux pas non plus obtenir leurs noms avec callee.caller.name
.
Réponses
Trop de publicités? Je ne suis pas sûr de Firefox, mais dans v8 / chrome, vous pouvez utiliser une méthode du constructeur Error appelée captureStackTrace
. ( Plus d'infos ici )
Donc, une façon simple de l'obtenir serait:
var getStackTrace = function() {
var obj = {};
Error.captureStackTrace(obj, getStackTrace);
return obj.stack;
};
console.log(getStackTrace());
Normalement, getStackTrace
serait sur la pile lorsqu'il est capturé. Le deuxième argument exclut que getStackTrace
soit inclus dans la trace de la pile.
Error.stack est ce dont vous avez besoin. Cela fonctionne en chrome et ff. Pour examiner
try { var a = {}; a.debug(); } catch(ex) {console.log(ex.stack)}
donnera en chrome:
TypeError: Object #<Object> has no method 'debug'
at eval at <anonymous> (unknown source)
at eval (native)
at Object._evaluateOn (unknown source)
at Object._evaluateAndWrap (unknown source)
at Object.evaluate (unknown source)
et dans ff:
@http://www.google.com.ua/:87 _firebugInjectedEvaluate("with(_FirebugCommandLine){try { var a = {}; a.debug() } catch(ex) {console.log(ex.stack)}\n};")@http://www.google.com.ua/:87 _firebugEvalEvent([object Event])@http://www.google.com.ua/:67
Il existe une bibliothèque appelée stacktrace.js qui vous donne des traces de pile entre navigateurs. Vous pouvez l'utiliser simplement en incluant le script et en appelant à n'importe quel moment:
var trace = printStackTrace();