Разбить Firebug при определении глобальной переменной x
У нас очень большое приложение для JavaScript, где после многих месяцев кодирования неизбежно возникла пара всплывающих подсказок, где переменная определена без использования ключевого слова var
следующим образом:
function() {
x = 5; ...
}
вместо:
function() {
var x = 5; ...
}
Это происходит где-то - мы не знаем, где - и поиск соответствующего имени переменной затруднен, так как это обычное слово, которое появляется в нашем источнике в 1000 раз.
Есть ли способ попросить Firebug разбить линию, которая сначала создает заданную глобальную переменную? Чтобы прояснить, я хотел бы разбить точно в тот момент, когда window.x
переключается с undefined
на определенное значение и прерывает оператор.
Я попытался создать выражение часов и надеялся, что смогу превратить его в точку останова, но я не могу создать часовые выражения без какого-либо контекста или области.
Если это невозможно с Firebug, меня бы интересовало все, что может сделать это в Firefox вообще.
Ответы
Ответ 1
Предоставлено несколько вещей
- Вы знаете имя переменной
- У вас нет переменной с этим именем в глобальной области (объявленные внешние функции), но только внутри функций.
- Есть вызовы функции, объявляющей переменную.
этот маленький script выполнит трюк:
<script type="text/javascript">
window.__defineSetter__("x", function(value) { console.trace(); });
x = 1;
</script>
Вы получите след исполняемого кода до этого назначения.
Он может не сообщать о некоторых ситуациях, поэтому взгляните на JSLint. Загрузите все свои JS файлы прямо там и наполните их.
Ответ 2
Здесь решение, которое я использовал, изменил решение Ionut G. Stan:
window.__defineSetter__("name", function(value) {
if (value=="div") {
debugger;
}
});
Я использовал debugger
вместо console.trace()
, поэтому я мог остановиться и посмотреть на него в середине исполнения. С помощью console.trace()
я получил множество отчетов о трассировке из-за того, что эта строка выполнялась много раз.
Неверная область оказалась похожей на Dojo, где Dojo устанавливает эту переменную в имя обработанного элемента.
Ответ 3
Вот еще одно решение, которое работает только в Firefox, потому что использует специальный метод
Ответ 4
Просмотрите свою веб-страницу в браузере SeaMonkey (я использую версию 1.1.16) и посмотрю на консоль ошибок, вы увидите сообщение этого типа для каждого присваивания необъявленной переменной:
Warning: assignment to undeclared variable x
Source File: http://....js
Line: ##
Ответ 5
В дополнение к отладке, я бы посоветовал проверить ваш код JSLint, который сообщает о непредвиденных назначениях в глобальной области видимости как ошибки.
Существует несколько пакетов командной строки jslint, таких как jslint4java, которые могут использоваться кросс-платформенными в Ant создавать скрипты.