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

Existe-t-il un moyen d’obtenir plus de 10 lignes dans une erreur de stack 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); } 

montre :

 $ 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) 

Est-il possible d’obtenir plus de 10 appels?

La solution la plus simple consiste à démarrer votre code avec les éléments suivants:

 Error.stackTraceLimit = Infinity; 

Si vous souhaitez voir la trace de la stack qui couvre les appels à setTimeout / setInterval, alors https://github.com/mattinsler/longjohn serait la solution.

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

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

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

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

Dans le monde des call-back-to-callback-to-callback, il est en fait très facile de dépasser la taille de la stack 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 stack:

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

Vous pouvez également utiliser le débogueur intégré , qui ouvre le débogueur dev-tools de Google Chrome. Il s’arrête sur n’importe quelle erreur et vous pouvez parcourir toute la stack. Il suffit de courir:

 $ node --inspect debug.js Debugger listening on port 9229. To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/...