В Firefox я могу получить трассировку стека исключения с помощью exception.stack.
Есть ли способ получить это и в других браузерах?
Редактировать: Я действительно хочу сохранить трассировку стека автоматически (если возможно), а не отлаживать ее в то время (т.е. я знаю, как получить трассировку стека в отладчике).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Не совсем, по крайней мере, не легко.
В IE вы можете отлаживать процесс браузера с помощью MS Script Debugger (который по какой-то причине является компонентом Office) или Visual Studio, а затем вы можете видеть стек на точках останова.
У Webkit теперь есть функциональность, которая обеспечивает трассировку стека:
Веб-инспектор: понимание трассировки стека, опубликовано Юрием Семихатским в среду, 20 апреля 2011 г., в 7:32 (webkit.org)
Из этого сообщения:

Ссылка битая, но думаю здесь есть копия pjh0718.blogspot.com/2016/02/…
Поместите эту строку в то место, где вы хотите распечатать трассировку стека:
console.info(new Error().stack);
Примечание: проверено мной на Хром 24 и Firefox 18
Возможно, стоит взглянуть и на этот инструмент.
Сладкий - я использую комбинацию 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.info (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"
неважно, нашел проблему. Поскольку это уже была ошибка, я могу сделать: function foo() { fdasmkl } try { foo() } catch(e) { console.info(e.stack) } немедленно
Если вам нужна трассировка стека строк, я бы пошел с ответом insin: stacktrace.js. Если вы хотите получить доступ к частям трассировки стека (номера строк, имена файлов и т. д.), stackinfo, который фактически использует stacktrace.js под капотом.
Вы должны попробовать хорошую библиотеку с открытым исходным кодом TraceKit, которая пытается создать трассировку стека для необработанных исключений JavaScript во всех основных браузерах. Вы можете узнать больше о Tracekit
https://github.com/csnover/TraceKit/
PS: Если вы ищете сервис (используя Tracekit) с хорошим пользовательским интерфейсом, вы можете попробовать Ататус
Намного удобнее, чем создавать исключение только для просмотра его стека.