web-dev-qa-db-fra.com

Plus de 10 lignes dans une erreur de pile node.js?

Existe-t-il un moyen d'obtenir plus de 10 lignes dans une erreur de pile node.js?

function a() { dieInHell(); }
function b() { a(); }
function c() { b(); }
function d() { c(); }
function e() { d(); }
function f() { e(); }
function g() { f(); }
function h() { g(); }
function i() { h(); }
function j() { i(); }
function k() { j(); }
function l() { k(); }
function m() { l(); }
function n() { m(); }
function o() { n(); }
function p() { o(); }
function q() { p(); }

try {
    q();
}
catch(e) {
    console.log(e.stack);
}

spectacles :

$ node debug.js 
ReferenceError: dieInHell is not defined
    at a (/Users/julien/tmp/debug.js:2:5)
    at b (/Users/julien/tmp/debug.js:6:5)
    at c (/Users/julien/tmp/debug.js:10:5)
    at d (/Users/julien/tmp/debug.js:14:5)
    at e (/Users/julien/tmp/debug.js:18:5)
    at f (/Users/julien/tmp/debug.js:22:5)
    at g (/Users/julien/tmp/debug.js:26:5)
    at h (/Users/julien/tmp/debug.js:30:5)
    at i (/Users/julien/tmp/debug.js:34:5)
    at j (/Users/julien/tmp/debug.js:38:5)

Existe-t-il un moyen de recevoir plus de 10 appels?

83
Julien Genestoux

La solution la plus simple pour cela est de démarrer votre code avec les éléments suivants:

Error.stackTraceLimit = Infinity;

Si vous souhaitez voir une trace de pile qui s'étend sur les appels setTimeout/setInterval, alors plus sophistiqué https://github.com/mattinsler/longjohn serait la voie à suivre.

120
Mariusz Nowak

Vous pouvez transmettre la limite de trace de pile en tant que paramètre de ligne de commande à node:

node --stack-trace-limit=1000 debug.js // par défaut 10

BTW, une autre chose qui semble improbable, mais qui vient de gaspiller quelques heures de mon temps pour le débogage, est la taille de la pile (qui par défaut est de 492 Ko). Vous pouvez avoir des erreurs très peu informatives si la pile est épuisée (RangeError sans aucune information supplémentaire). Vous pouvez augmenter la taille de la pile avec:

node --stack-size=1024 debug.js // par défaut 492

Dans le monde des chaînages callback-to-callback-to-callback, il est en fait très facile de dépasser la taille de la pile pour les grandes tailles d'entrée, si le programme n'est pas écrit dans cet esprit.

Pour voir toutes les options liées à la pile:

node --v8-options | grep -B0 -A1 stack

53
jakub.g
5
3rdEden

Vous pouvez également utiliser débogueur intégré , qui ouvre le débogueur de dev-tools de Google Chrome. Il s'arrête en cas d'erreur et vous pouvez parcourir toute la pile. Exécutez simplement:

$ node --inspect debug.js

Debugger listening on port 9229.
To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/...
0
zbycz