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


89

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

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

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

Ответы:


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 под капотом.


0

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

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.