Trace de pile d'exceptions Javascript

89

Dans Firefox, je peux obtenir la trace de pile d'une exception en utilisant exception.stack.

Existe-t-il également un moyen d'obtenir cela dans d'autres navigateurs?

Edit: Je veux en fait enregistrer automatiquement la trace de la pile (si possible) et ne pas la déboguer à ce moment-là (c'est-à-dire que je sais comment obtenir la trace de la pile dans un débogueur).

ujh
la source

Réponses:

73

Placez cette ligne à l'endroit où vous souhaitez imprimer la trace de la pile:

console.log(new Error().stack);

Remarque: testé par moi sur Chrome 24 et Firefox 18

Cela peut également valoir la peine de jeter un coup d'œil à cet outil .

Francesco Casula
la source
2
Sweet - J'utilise une combinaison de onerror pour obtenir le numéro de ligne, puis j'enroule la ligne incriminée avec un try catch et votre suggestion pour alerter le stacktrace à l'utilisateur. `window.onerror = function (message, url, lineNumber) {alert ('message:' + message + '- url:' + url + '- ln:' + lineNumber); retourne vrai; }; `Ensuite, enveloppez-le pour imprimer le stacktrace. `try {// Du code à l'origine de l'exception. } catch (e) {alert (new Error (). stack); } `
Philip Murphy
meurt en quelque sorte ne me donne que la première ligne de la pile. Qu'est-ce que je fais mal?? ie: function foo () {fdasmkl} try {foo ()} catch (e) {err = new Error (e) .stack; console.log (err)} = >>> Error: ReferenceError: fdasmkl is not defined at <anonymous>:6:7au lieu de"Error: ReferenceError: fdasmkl is not defined at eval (eval at <anonymous> (:6:1), <anonymous>:1:1) at <anonymous>:6:1"
chitzui
tant pis, a trouvé le problème. Comme c'était déjà une erreur, je peux faire: function foo() { fdasmkl } try { foo() } catch(e) { console.log(e.stack) }immédiatement
chitzui
23

Webkit dispose désormais d'une fonctionnalité qui fournit des traces de pile:

Inspecteur Web: Comprendre les traces de pile , posté par Yury Semikhatsky le mercredi 20 avril 2011 à 7 h 32 (webkit.org)

De ce post:

Brian M. Hunt
la source
1
Beaucoup plus pratique que de créer une exception juste pour afficher sa pile.
Alex Churchill
Le lien est cassé, mais je pense qu'il y en a une copie ici pjh0718.blogspot.com/2016/02/…
Stephen Turner
2

Si vous voulez la trace de la pile de chaînes, j'irais avec la réponse d' insin : stacktrace.js . Si vous souhaitez accéder aux éléments d'un stacktrace (numéros de ligne, noms de fichiers, etc.), stackinfo , qui utilise en fait stacktrace.js sous le capot.

BT
la source
0

Pas vraiment, du moins pas facilement.

Dans IE, vous pouvez déboguer le processus du navigateur avec MS Script Debugger (qui pour une raison quelconque est un composant Office) ou Visual Studio, puis vous pouvez voir la pile sur les points d'arrêt.

Levik
la source
0

Vous devez essayer la bonne bibliothèque open source TraceKit qui tente de créer des traces de pile pour les exceptions JavaScript non dans tous les principaux navigateurs. Vous pouvez en savoir plus sur Tracekit

https://github.com/csnover/TraceKit/

PS : Si vous recherchez un service (utilisant Tracekit) avec une bonne interface utilisateur, vous pouvez essayer Atatus

Fizer Khan
la source