Трасування стека виключень Javascript


89

У Firefox я можу отримати стек винятку за допомогою exception.stack.

Чи є спосіб отримати це і в інших браузерах?

Редагувати: Я насправді хочу автоматично зберегти трасування стека (якщо це можливо) і не налагоджувати його на той час (тобто я знаю, як отримати трасування стека в налагоджувачі).

Відповіді:


73

Помістіть цей рядок там, де потрібно надрукувати трасування стека:

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

Примітка: протестовано мною на Chrome 24 та Firefox 18

Можливо, варто також поглянути на цей інструмент .


2
Солодко - я використовую комбінацію onerror, щоб отримати номер рядка, а потім обмотую рядок, що порушує, спробу catch і вашу пропозицію, щоб попередити стек-трасу користувача. `window.onerror = function (message, url, lineNumber) {alert ('message:' + message + '- url:' + url + '- ln:' + lineNumber); повернути істинно; }; `Потім оберніть його, щоб роздрукувати стек. `try {// Деякий код, що викликає виняток. } catch (e) {alert (нова помилка (). стек); } `
Філіп Мерфі

якимось чином смерть дає мені лише перший рядок стека. Що я роблю неправильно ?? тобто: function foo () {fdasmkl} try {foo ()} catch (e) {err = new Error (e) .stack; console.log (помилка)} = >>> 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

нічого, знайшов проблему. Оскільки це вже була помилка, я можу зробити: 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 . Якщо ви хочете отримати доступ до фрагментів стека (номери рядків, імена файлів тощо), stackinfo , який фактично використовує stacktrace.js під капотом.


0

Не дуже, принаймні нелегко.

В IE ви можете налагодити процес браузера за допомогою налагоджувача MS Script (який з якихось причин є компонентом 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.