Pregunta ¿Más de 10 líneas en un error de pila node.js?


¿Hay alguna manera de obtener más de 10 líneas en un error de pila 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);
}

muestra:

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

¿Hay alguna manera de obtener más de 10 llamadas?


73
2017-10-08 13:12


origen


Respuestas:


La solución más sencilla para eso es comenzar su código con lo siguiente:

Error.stackTraceLimit = Infinity;

Si desea ver el seguimiento de la pila que se extiende sobre las llamadas a setTimeout / setInterval, entonces más sofisticado https://github.com/mattinsler/longjohn sería el camino a seguir.


101
2018-05-02 18:08



Puede pasar el límite de seguimiento de pila como un parámetro de línea de comando a node:

node --stack-trace-limit=1000 debug.js // predeterminado 10

Por cierto, otra cosa que parece poco probable que suceda, pero solo desperdicia unas pocas horas de mi tiempo para la depuración, es el tamaño de la pila (que por defecto es 492 kB). Puede tener errores muy poco informativos si la pila está agotada (RangeError sin ninguna información adicional). Puedes aumentar el tamaño de la pila con:

node --stack-size=1024 debug.js // predeterminado 492

En el mundo de los encadenamientos de devolución de llamada a devolución de llamada, de hecho es muy fácil exceder el tamaño de pila para tamaños de entrada grandes, si el programa no está escrito teniendo esto en cuenta.

Para ver todas las opciones relacionadas con la pila:

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


44
2017-10-31 10:28



Utilizar el https://github.com/tlrobinson/long-stack-traces módulo.


5
2017-10-08 18:54



También puedes usar depurador incorporado, que abre el conocido depurador de herramientas de desarrollo de Google Chrome. Se detiene ante cualquier error y puede navegar por toda la pila. Solo corre:

$ 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
2017-12-04 15:15