Czy istnieje sposób, aby uzyskać więcej niż 10 wierszy w błędzie stosu 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);
}
przedstawia :
$ 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)
Czy jest sposób, aby uzyskać więcej niż 10 połączeń?
node.js
stack-trace
Julien Genestoux
źródło
źródło
Odpowiedzi:
Najłatwiejszym rozwiązaniem jest uruchomienie kodu w następujący sposób:
Error.stackTraceLimit = Infinity;
Jeśli chcesz zobaczyć ślad stosu, który obejmuje wywołania setTimeout / setInterval, bardziej wyrafinowany https://github.com/mattinsler/longjohn byłby drogą do zrobienia.
źródło
stackTraceLimit
. Poza tym wpływa tylko na to,Error.stack
co widzę. Wbudowany debugger zawsze wyświetla pełny stos (bt
polecenie).--inspect
lub--inpect-brk
Możesz przekazać limit śledzenia stosu jako parametr wiersza poleceń do
node
:node --stack-trace-limit=1000 debug.js
// domyślnie 10Przy okazji, kolejną rzeczą, która wydaje się mało prawdopodobna, ale straciłem kilka godzin mojego czasu na debugowanie, jest rozmiar stosu (który domyślnie wynosi 492 kB) . Możesz mieć bardzo nieinformacyjne błędy, jeśli stos jest wyczerpany (
RangeError
bez żadnych dodatkowych informacji). Możesz zwiększyć rozmiar stosu za pomocą :node --stack-size=1024 debug.js
// domyślnie 492W świecie łańcuchów wywołań zwrotnych do wywołań zwrotnych do wywołań zwrotnych w rzeczywistości bardzo łatwo jest przekroczyć rozmiar stosu dla dużych rozmiarów danych wejściowych, jeśli program nie jest o tym napisany.
Aby zobaczyć wszystkie opcje związane ze stosem:
node --v8-options | grep -B0 -A1 stack
źródło
NODE_OPTIONS
zmiennej środowiskowej, npNODE_OPTIONS='--stack-trace-limit=10000' /path/to/some-script
. Przydatne, jeśli nie wywołujesznode
bezpośrednio.Skorzystaj z modułu https://github.com/tlrobinson/long-stack-traces .
źródło
Możesz także użyć wbudowanego debuggera , który otwiera znany debugger narzędzi programistycznych Google Chrome. Zatrzymuje się przy każdym błędzie i możesz przeglądać cały stos. Po prostu biegnij:
$ node --inspect debug.js Debugger listening on port 9229. To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/...
źródło