Кто-нибудь знает, как напечатать трассировку стека в Node.js?
javascript
node.js
stack-trace
mike.toString
источник
источник
sys.puts(new Error().stack)
(после добавления системного модуля)'util'
.new Error().stack
, который работает в тех случаях, когда вы не хотите задействовать консоль.trace
является то, что он показывает текущую строку / контекст, а такжеstack
нет. Информация находится в объекте ошибки, если вы хотите вручную создать эту строку, я думаю.Теперь на консоли есть специальная функция для этого:
источник
console.trace()
.--stack_trace_limit=200
Как уже ответили, вы можете просто использовать команду трассировки :
Однако, если вы пришли к этому вопросу в поисках того, как зарегистрировать трассировку стека исключения , вы можете просто зарегистрировать объект Exception.
Это войдет:
Если ваша версия Node.js <6.0.0 , регистрации объекта Exception будет недостаточно. В этом случае он будет печатать только:
Для версии узла <6 используйте
console.error(e.stack)
вместоconsole.error(e)
печати сообщение об ошибке плюс полный стек, как в текущей версии узла.Примечание: если исключение создается в виде строки
throw "myException"
, невозможно получить трассировку стека иe.stack
выходы журналов не определены .Чтобы быть в безопасности, вы можете использовать
и это будет работать для старых и новых версий Node.js.
источник
console.error(e)
печатать все вe
объекте, в том числеe.stack
?Чтобы распечатать трассировку стека
Error
в консоли более читабельным способом:Пример результата:
источник
С легкодоступным модулем Node можно получить трассировки стека полной длины из Node (хотя и с небольшим снижением производительности): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack -traces-для-узла-JS
источник
Попробуйте Error.captureStackTrace (targetObject [, constructorOpt]) .
Функция
a
иb
фиксируется в стеке ошибок и сохраняется вmyObj
.источник
stack
свойство, вам нужно вызвать это , если узел> = 6:Error.captureStackTrace(error)
.Error.captureStackTrace
отображался в трассировке стека, вы можете опустить его, передав его в качествеconstructorOpt
аргумента.Насколько я знаю, печать полной трассировки стека в nodejs невозможна, вы можете просто напечатать «частичную» трассировку стека, вы не можете видеть, откуда вы пришли в коде, именно там, где происходит исключение. Это то, что Райан Даль объясняет в этом видео на YouTube. http://youtu.be/jo_B4LTHi3I в мин 56:30 за точность. Надеюсь это поможет
источник
Ответ @isaacs правильный, но если вам нужен более конкретный или более чистый стек ошибок , вы можете использовать эту функцию:
Эта функция вдохновлена непосредственно из
console.trace
функции в NodeJS .Исходный код: Последняя версия или Старая версия .
источник
err.stack
более правильный ответ.Если вы хотите регистрировать только трассировку стека ошибки (а не сообщения об ошибке), узел 6 и выше автоматически включает имя ошибки и сообщение в трассировку стека, что немного раздражает, если вы хотите выполнить некоторую пользовательскую обработку ошибок:
console.log(error.stack.replace(error.message, ''))
Этот обходной путь будет регистрировать только имя ошибки и трассировку стека (так что вы можете, например, отформатировать сообщение об ошибке и отобразить его так, как вы хотите где-то еще в вашем коде).
В приведенном выше примере будет напечатано только имя ошибки, за которым следует трассировка стека, например:
Вместо:
источник
В случае, если кто-то все еще ищет это, как я, то есть модуль, который мы можем использовать, называемый «трассировка стека». Это действительно популярно. НПМ Ссылка
Затем идите по следу.
Или просто напечатайте след:
источник
Вы можете использовать модуль трассировки стека узлов, который является мощным модулем для отслеживания стеков вызовов.
источник