140 votes

Comment obtenir le résultat de console.trace () sous forme de chaîne en javascript avec chrome ou firefox?

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 .

125voto

chjj Points 5676

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.

45voto

Molecular Man Points 15187

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
 

15voto

fijiaaron Points 1064

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();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X