定义全局变量x时,Firebug会中断

Mac*_*iek 15 javascript debugging firefox firebug scope

我们有一个非常大的JavaScript应用程序,经过几个月的编码后,不可避免地出现了几个范围滑点,其中定义变量而不使用var以下方式的关键字:

function() {  
  x = 5; ...  
}
Run Code Online (Sandbox Code Playgroud)

代替:

function() {  
  var x = 5; ...  
}
Run Code Online (Sandbox Code Playgroud)

这发生在某个地方 - 我们不确定在哪里 - 并且搜索有问题的变量名称很困难,因为它是我们源代码中出现1000次的常用词.

有没有办法让Firebug在首先创建给定全局变量的行上中断?为了澄清,我想在window.x切换undefined到定义值的时刻和break语句中断.

我已经尝试创建一个监视表达式,并希望我可以把它变成一个断点,但我似乎无法在没有某种上下文或范围的情况下创建监视表达式.

如果使用Firebug无法做到这一点,我会对能在Firefox中完成此任务的任何事情感兴趣.

Ion*_*tan 12

提供了一些东西

  1. 您知道变量的名称
  2. 在全局范围(在函数外部声明)中没有具有该名称的变量,但仅在内部函数中.
  3. 有函数调用声明变量.

这个小脚本可以解决这个问题:

<script type="text/javascript">
window.__defineSetter__("x", function(value) { console.trace(); });
x = 1;
</script>
Run Code Online (Sandbox Code Playgroud)

在分配之前,您将获得执行代码的跟踪.

它可能无法报告某些情况,因此请查看JSLint.将所有JS文件加载到那里并将它们拖放.