console.trace()
выводит результат на консоль.
Я хочу получить результаты в виде строки и сохранить их в файл.
Я не определяю имена для функций, и я также не могу получить их имена callee.caller.name
.
99
console.trace()
выводит результат на консоль.
Я хочу получить результаты в виде строки и сохранить их в файл.
Я не определяю имена для функций, и я также не могу получить их имена callee.caller.name
.
Ответы:
Я не уверен насчет firefox, но в v8 / chrome вы можете использовать метод вызываемого конструктора Error
captureStackTrace
. ( Подробнее здесь )Итак, хакерский способ получить это:
Обычно
getStackTrace
при захвате будет в стеке. Второй аргумент исключаетgetStackTrace
включение в трассировку стека.источник
Error().stack
. Хотя имена объектов и функций теряются в firefox, а имя объекта теряется в chrome (так же, какError.captureStackTrace
),Error().stack
работает в обоих браузерах и дает мне достаточно информации для отладки.Error.stack - это то, что вам нужно. Работает в Chrome и Firefox. Например
выдаст в Chrome:
и в Firefox:
источник
(new Error).stack
Это даст трассировку стека (как массив строк) для современных Chrome, Firefox, Opera и IE10 +
Использование:
Он исключает из стека свой собственный вызов, а также заголовок «Ошибка», который используется Chrome и Firefox (но не IE).
Он не должен падать в старых браузерах, а просто возвращать пустой массив. Если вам нужно более универсальное решение, посмотрите stacktrace.js . Список поддерживаемых браузеров действительно впечатляет, но, на мой взгляд, он очень велик для той небольшой задачи, для которой он предназначен: 37 КБ уменьшенного текста, включая все зависимости.
источник
Существует библиотека под названием stacktrace.js, которая дает вам кроссбраузерную трассировку стека. Вы можете использовать его, просто включив скрипт и вызвав в любой момент:
источник
Это лишь незначительное улучшение отличного кода Константина. Это немного сокращает расходы на перехват и просто создает экземпляр стека ошибок:
Обычно мне нужен определенный уровень трассировки стека (для моего пользовательского регистратора), поэтому это также возможно при вызове:
источник
вам только нужно
var stack = new Error().stack
. это упрощенная версия ответа @sgouros.Наверное, не будет работать в каждом браузере (работает в Chrome).
источник