我正在调试一个大型 JavaScript 代码库,其中,在某些时候,刷新页面时“控制台”变量为空。
(console == null)
有没有办法在控制台上设置监视并在该值更改(或条件为真)时使 JavaScript 中断执行?
我在 Windows 7 上使用 Chrome。
我正在调试一个大型 JavaScript 代码库,其中,在某些时候,刷新页面时“控制台”变量为空。
(console == null)
有没有办法在控制台上设置监视并在该值更改(或条件为真)时使 JavaScript 中断执行?
我在 Windows 7 上使用 Chrome。
下面的答案不起作用,window.console
因为console
(像其他浏览器原生环境变量一样)被特殊对待。任何试图将值分配给console
仅“掩盖”原始值的尝试;它不会取代它。您无法检测到console
值何时更改,但您可以delete window.console
恢复原始环境提供的值。
对于其他值,用于Object.defineProperty
为一些全局定义自定义设置器window.foobar
。window.foobar
每当分配一个新值时,setter 函数就会运行:
(function() {
var actualFoobar = window.foobar;
Object.defineProperty(window, "foobar", {
set: function(newValue) {
if(newValue === null) {
alert("someone is clobbering foobar!"); // <-- breakpoint here!
}
// comment out to disallow setting window.foobar
actualFoobar = newValue;
},
get: function() { return actualFoobar; }
});
})();
然后,在该 setter 函数中放置一个断点。
这种方法适用于全局变量或任何对象属性(只需更改window
为具有该属性的对象)。
浏览器实现的函数不能为空!从技术上讲。
如果window.console.log
分配了功能null
,则只需将其恢复删除即可!
delete console.log
这将完成这项工作:)
编辑:这不是您的主要问题的答案,但我认为您的问题来自您寻找调试方法,所以这个答案基本上跳过了检测 var 更改的需要。
你不能碰那个console
物体……永远,永远。唯一可能发生的情况是,console
在全局范围之外的范围/命名空间中声明了一个变量,从而隐藏了全局控制台。不过,您仍然可以使用 访问它window.console
。除此之外,我能想到的唯一原因是:
console
要找出您需要在代码中查看的位置设置条件断点并观察几个表达式,并使用暂停未捕获异常按钮