console.trace()
affiche son résultat sur la console.
Je souhaite 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
.
99
Réponses:
Je ne suis pas sûr de Firefox, mais dans v8 / chrome, vous pouvez utiliser une méthode appelée sur le constructeur Error
captureStackTrace
. ( Plus d'infos ici )Donc, une façon piratée de l'obtenir serait:
Normalement,
getStackTrace
serait sur la pile quand il est capturé. Le deuxième argument exclutgetStackTrace
d'être inclus dans la trace de pile.la source
Error().stack
. Bien que les noms d'objet et de fonction soient perdus dans Firefox et que le nom d'objet soit perdu dans Chrome (le même queError.captureStackTrace
),Error().stack
fonctionne les deux navigateurs et me donne suffisamment d'informations pour déboguer.Error.stack est ce dont vous avez besoin. Cela fonctionne dans Chrome et Firefox. Par exemple
donnera dans Chrome:
et dans Firefox:
la source
(new Error).stack
Cela donnera une trace de la pile (sous forme de tableau de chaînes) pour Chrome, Firefox, Opera et IE10 + modernes
Usage:
Il exclut de la pile son propre appel ainsi que le titre "Erreur" qui est utilisé par Chrome et Firefox (mais pas IE).
Il ne devrait pas planter sur les anciens navigateurs, mais simplement renvoyer un tableau vide. Si vous avez besoin d'une solution plus universelle, consultez stacktrace.js . Sa liste de navigateurs pris en charge est vraiment impressionnante, mais à mon avis, elle est très grande pour la petite tâche à laquelle elle est destinée: 37 Ko de texte minifié, y compris toutes les dépendances.
la source
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 à tout moment:
la source
Ce n'est qu'une amélioration mineure de l'excellent code de Konstantin. Cela réduit un peu les frais de lancer-capture et instancie simplement la pile d'erreur:
Je veux généralement un niveau spécifique de trace de pile (pour mon enregistreur personnalisé), c'est donc également possible lors de l'appel:
la source
vous avez seulement besoin
var stack = new Error().stack
. ceci est une version simplifiée de la réponse @sgouros.Ne fonctionnera probablement pas dans tous les navigateurs (fonctionne dans Chrome).
la source