我正在调试一个大的JavaScript代码库,在某些时候,刷新页面时“console”变量会变为空。
有没有办法在控制台上设置监视并在该值发生变化时(或条件(console == null)
为真时)执行JavaScript中断?
我在Windows 7上使用Chrome。
答案 0 :(得分:19)
以下答案不适用于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
更改为具有该属性的对象)。
答案 1 :(得分:0)
浏览器实现的功能无法归零!从技术上讲。
如果window.console.log
funcion已分配null
,则只需将其恢复即可将其删除!
delete console.log
那将完成这项工作:)
编辑:这不是你的主要问题的答案,但我认为你的问题是从你搜索调试的方式,所以这个答案基本上跳过了检测var变化的需要。答案 2 :(得分:0)
您无法触摸console
对象......永远不会。唯一可能发生的事情是在范围/命名空间中声明console
变量,而不是全局范围,隐藏全局控制台。不过,您仍然可以使用window.console
访问它。除此之外,我能想到的唯一因素是:
console
的IE版本要找出您需要查看代码set conditional breakpoints的位置并观看几个表达式,使用暂停未捕获的异常按钮