Трассировка стека исключений Javascript

89

В Firefox я могу получить трассировку стека исключения, используя exception.stack.

Есть ли способ получить это и в других браузерах?

Изменить: я действительно хочу сохранить трассировку стека автоматически (если возможно) и не отлаживать ее в то время (т.е. я знаю, как получить трассировку стека в отладчике).

ujh
источник

Ответы:

74

Поместите эту строку в то место, где вы хотите распечатать трассировку стека:

console.log(new Error().stack);

Примечание: протестировано мной в Chrome 24 и Firefox 18

Возможно, стоит взглянуть и на этот инструмент .

Франческо Казула
источник
2
Сладкий - я использую комбинацию onerror, чтобы получить номер строки, а затем завершаю вызывающую ошибку строкой с помощью try catch и вашего предложения, чтобы предупредить пользователя о трассировке стека. `window.onerror = function (message, url, lineNumber) {alert ('message:' + message + '- url:' + url + '- ln:' + lineNumber); вернуть истину; }; `Затем оберните его, чтобы распечатать трассировку стека. `try {// Код, вызывающий исключение. } catch (e) {предупреждение (новая ошибка (). стек); } `
Филип Мерфи
почему-то dies дает мне только первую строку стека. Что я делаю не так?? то есть: функция foo () {fdasmkl} try {foo ()} catch (e) {err = new Error (e) .stack; console.log (err)} = >>> Error: ReferenceError: fdasmkl is not defined at <anonymous>:6:7вместо"Error: ReferenceError: fdasmkl is not defined at eval (eval at <anonymous> (:6:1), <anonymous>:1:1) at <anonymous>:6:1"
chitzui
Nevermind, нашел проблему. Поскольку это уже была ошибка, я могу сделать: function foo() { fdasmkl } try { foo() } catch(e) { console.log(e.stack) }немедленно
chitzui
23

У Webkit теперь есть функции, обеспечивающие трассировку стека:

Веб-инспектор: понимание трассировок стека , опубликовано Юрием Семихатским в среду, 20 апреля 2011 г., в 7:32 (webkit.org)

Из этого сообщения:

Брайан М. Хант
источник
1
Намного удобнее, чем создавать исключение только для просмотра его стека.
Алекс Черчилль
Ссылка не работает, но я думаю, что здесь есть копия pjh0718.blogspot.com/2016/02/…
Стивен Тернер
2

Если вам нужна трассировка стека строк, я бы пошел с ответом insin : stacktrace.js . Если вы хотите получить доступ к частям stacktrace (номера строк, имена файлов и т. Д.), Stackinfo , который фактически использует stacktrace.js под капотом.

BT
источник
0

Не совсем, по крайней мере, не легко.

В IE вы можете отлаживать процесс браузера с помощью MS Script Debugger (который по какой-то причине является компонентом Office) или Visual Studio, а затем вы можете видеть стек на точках останова.

левик
источник
0

Вы должны попробовать хорошую библиотеку с открытым исходным кодом TraceKit, которая пытается создать трассировку стека для необработанных исключений JavaScript во всех основных браузерах. Вы можете узнать больше о Tracekit

https://github.com/csnover/TraceKit/

PS : Если вы ищете сервис (используя Tracekit) с хорошим пользовательским интерфейсом, вы можете попробовать Atatus

Физер Хан
источник