Czy ktoś wie, jak wydrukować ślad stosu w Node.js?
javascript
node.js
stack-trace
mike.toString
źródło
źródło
sys.puts(new Error().stack)
(po dodaniu modułu systemowego)'util'
.new Error().stack
, co działa w przypadkach, gdy nie chcesz angażować konsoli.trace
jest to, że pokazuje również bieżącą linię / kontekst, a którastack
nie. Informacja znajduje się w obiekcie błędu, jeśli myślę, że chcesz ręcznie utworzyć tę linię.Teraz na konsoli jest dedykowana funkcja :
źródło
console.trace()
.--stack_trace_limit=200
Jak już odpowiedziano, możesz po prostu użyć polecenia trace :
Jednakże, jeśli przyszedł na to pytanie szukasz informacji na temat logowania ślad stosu wyjątku , można po prostu zalogować obiekt wyjątku.
Będzie rejestrować:
Jeśli wersja Node.js jest mniejsza niż 6.0.0 , rejestrowanie obiektu wyjątku nie będzie wystarczające. W takim przypadku zostanie wydrukowane tylko:
W przypadku wersji węzła <6 użyj
console.error(e.stack)
zamiast,console.error(e)
aby wydrukować komunikat o błędzie plus pełny stos, podobnie jak obecna wersja węzła.Uwaga: jeśli wyjątek jest tworzony jako ciąg znaków
throw "myException"
, nie jest możliwe odzyskanie śladu stosu, a wyniki rejestrowaniae.stack
są niezdefiniowane .Aby być bezpiecznym, możesz użyć
i będzie działać dla starych i nowych wersji Node.js.
źródło
console.error(e)
wydrukuje wszystkiego we
obiekcie, w tyme.stack
?Aby wydrukować stos śledzenia
Error
w konsoli w bardziej czytelny sposób:Przykładowy wynik:
źródło
Dzięki łatwo dostępnemu modułowi Węzła można uzyskać ślady stosu o pełnej długości z Węzła (aczkolwiek z niewielką utratą wydajności): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack -traces-for-node-js
źródło
Spróbuj Error.captureStackTrace (targetObject [, constructorOpt]) .
Funkcja
a
ib
są przechwytywane w stos błędów i przechowywane wmyObj
.źródło
stack
własności, trzeba zadzwonić, jeśli ten węzeł> = 6:Error.captureStackTrace(error)
.Error.captureStackTrace
pojawiła się w śladzie stosu, możesz ją pominąć, przekazując ją jakoconstructorOpt
argument.Z tego co wiem, drukowanie pełnego śladu stosu w nodejs nie jest możliwe, możesz po prostu wydrukować „częściowy” ślad stosu, którego nie widzisz w kodzie, tylko gdzie występuje wyjątek. Tak wyjaśnia Ryan Dahl w tym filmie na youtube. http://youtu.be/jo_B4LTHi3I o min. 56:30 za precyzję. Mam nadzieję że to pomoże
źródło
Odpowiedź @isaacs jest poprawna, ale jeśli potrzebujesz bardziej szczegółowego lub czystszego stosu błędów , możesz użyć tej funkcji:
Ta funkcja jest zainspirowana bezpośrednio z
console.trace
funkcji w NodeJS .Kod źródłowy: najnowsza wersja lub stara wersja .
źródło
err.stack
jest bardziej poprawna odpowiedź.Jeśli chcesz rejestrować tylko ślad stosu błędu (a nie komunikat o błędzie), Węzeł 6 i wyżej automatycznie dołącza nazwę błędu i komunikat do śladu stosu, co jest nieco denerwujące, jeśli chcesz wykonać niestandardową obsługę błędów:
console.log(error.stack.replace(error.message, ''))
To obejście spowoduje rejestrowanie tylko nazwy błędu i śledzenia stosu (dzięki czemu można na przykład sformatować komunikat o błędzie i wyświetlić go tak, jak chcesz w innym miejscu kodu).
Powyższy przykład wypisuje tylko nazwę błędu, po której następuje ślad stosu, na przykład:
Zamiast:
źródło
W przypadku, gdy ktoś nadal tego szuka, tak jak ja, istnieje moduł, którego możemy użyć o nazwie „stack-trace”. To jest bardzo popularne. Link NPM
Następnie przejdź przez ślad.
Lub po prostu wydrukuj ślad:
źródło
możesz użyć modułu śledzenia stosu węzłów, który jest modułem o pełnej mocy do śledzenia stosów wywołań.
źródło