След Javascript

Как получить обратную трассировку в Javascript?

Идеальные характеристики:

  • имя функции входа или какой-либо значимый идентификатор для анонимных функций,
  • список аргументов на каждом уровне,
  • номера строк.

Можно ли это сделать в стандартном ECMAScript?

Если нет, то можно ли это сделать на распространенных диалектах веб-браузера?

Спасибо.

Редактировать --

Спасибо за ваши предложения.

Мой диалект не поддерживает arguments.caller или arguments.callee.

Я могу сделать это:

try {
    let x = null;
    x .foo ();
}
catch (e) {
        debug (dump (e.stack));
}

Это дает мне информацию в виде строки, что хорошо для быстрого просмотра, но было бы здорово пройтись e.stack. Есть ли у него стандартная форма?

Спасибо еще раз.


person spraff    schedule 22.07.2011    source источник
comment
Лучший способ получить трассировку ошибок — использовать отладчики на основе браузера.   -  person Raynos    schedule 22.07.2011
comment
Какой у тебя диалект? Что такое dump?   -  person Raynos    schedule 22.07.2011
comment
Это частный диалект, кажется в основном законченным, имеет несколько расширений.   -  person spraff    schedule 22.07.2011


Ответы (3)


В моем опыте отладки я всегда использую это

(function () { console.log(new Error().stack); })();

Как следует из приведенных ниже комментариев, читатели должны предпочесть: console.log(new Error().stack);

person linzuojian    schedule 10.06.2015
comment
Зачем дополнительная функция-оболочка? ты не можешь просто использовать console.log(new Error().stack);? Это сработало для меня. - person Daniel Tonon; 30.08.2017
comment
Я также не вижу причин для функции-обертки - person Timo Huovinen; 15.06.2018
comment
Мне нравится чистая глобальная область видимости. Итак, я добавляю обертку. - person linzuojian; 28.02.2019
comment
Добавление функции-оболочки, очевидно, добавляет дополнительную функцию (бессмысленно?) на вершину стека, делая код, который вам нужен, на один шаг ниже. Я рекомендую читателям не делать этого, не знаю, была ли у плаката причина хотеть этого, поэтому я не изменю ответ. - person DanielM; 25.04.2019

Другой способ — использовать console.trace();

источник: https://developer.mozilla.org/en-US/docs/Web/API/Console/trace

person Lafif Astahdziq    schedule 07.03.2020

Эта библиотека: stacktrace-js работает везде, не только с ошибками.

Пример:

StackTrace.get()
    .then(stack => { console.log(stack) })
    .catch(err => { console.log(err) });
person paul.ago    schedule 10.01.2018