Для простой отладки javascript я буду использовать предупреждения для отображения значений переменных и т.п. Есть ли способ заставить текущий стек вызовов в javascript отображать его в сообщении?
Спасибо.
Для простой отладки javascript я буду использовать предупреждения для отображения значений переменных и т.п. Есть ли способ заставить текущий стек вызовов в javascript отображать его в сообщении?
Спасибо.
Быстрая и грязная в браузерах на базе Gecko:
new Error().stack
Вы также можете вручную тралить часть стека, используя Function.prototype.caller:
var thisFunction = arguments.callee;
var caller = thisFunction.caller;
var callerCaller = caller.caller;
// ...and eventually, assuming no recursion:
var bottomCaller = ...;
assert(bottomCaller.caller === null);
Одно (возможно, большое) оговорка трюка .caller заключается в том, что он не обрабатывает рекурсию - .caller
смотрит сверху стека вниз, чтобы найти первый экземпляр функции в стеке, а затем возвращает непосредственный вызывающий, поэтому, не будучи осторожным, вы можете бесконечно искать вызывающих абонентов.
Еще одна оговорка к caller
заключается в следующем: если в любом из ваших кодов используется строгий режим ECMAScript 5, свойство caller
функций строгого режима (или функций, которые сами вызывались из строгих функций режима) так называемая "ядовитая таблетка", которая бросает TypeError
при доступе. Свойство caller
"связанных" функций (созданных методом ES5 Function.prototype.bind
) также является ядовитой таблеткой. Эти ограничения нарушают общий алгоритм стековой ходьбы, хотя можно представить, как использовать его для использования (это могут быть функции входа и выхода для аннотирования).
Заметьте, что стековая ходьба, как это, не является отличной идеей в производственном коде (в качестве быстрого взлома для отладки, отлично, tho); в тот момент, когда вы поднимаете стек, поскольку в последнем примере несколько дороже в Mozilla JS engine, и он, вероятно, выкинет вас из машинного кода и вернется в интерпретируемый код. Кроме того, стековая прогулка - это O (n 2), что может иметь значение, если у вас есть сложные, глубокие стеки.
В Firefox + Firebug и WebKit вы можете использовать console.trace()
Он не отображает alert()
, а печатает stacktrace
на консоли.
Используйте этот отладчик, например Firebug, если вы находитесь в Firefox. У Chrome и Opera есть встроенный отладчик. И Инструменты разработчиков для Internet Explorer.
Лучший способ отладки Javascript - использовать Firebug, который включает полный отладчик Javascript.
Если вы отлаживаете IE, вы можете использовать Visual Web Developer Express (или любую другую редакцию Visual Studio).
Если вы отлаживаете IE8, вы можете использовать его встроенные инструменты разработчика, в том числе отладчик.
Можно получить стек вызовов в Javascript; см. здесь.
Вы смотрели на firebug - и точку останова. Если это просто для отладки, тогда этого может быть достаточно.
Кроме того, вы можете посмотреть Здесь
Это даст вам весь стек вызовов работаю хорошо для меня.
var y = 'arguments.callee.caller';
while (eval(y) != undefined) {
stak += eval(y + '.toString()');
y = y + '.caller';
}
alert(stak);
Для отладки nodejs, в Visual Studio Code, начиная с версии 1.1.2.2, View- > Debug (Ctrl + Shift + D)