Chrome JavaScript调试:如何在值更改时中断

Jan*_*sky 13 javascript debugging google-chrome

我正在调试一个大的JavaScript代码库,在某些时候,"console"变量在刷新页面时会变为空.

有没有办法在控制台上设置监视并在该值更改时(或条件(console == null)为真时)执行JavaScript中断执行?

我在Windows 7上使用Chrome.

aps*_*ers 19

下面的答案不起作用,window.console因为console(像其他浏览器本地环境变量一样)是专门处理的.任何分配值的尝试console只会"掩盖"原始值; 它不会取代它.您无法检测console值何时更改,但您可以delete window.console还原原始环境提供的值.

对于其他值,用于Object.defineProperty为某些全局定义自定义setter 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; }
    });

})();
Run Code Online (Sandbox Code Playgroud)

然后,在该setter函数中放置一个断点.

此方法适用于全局变量或任何对象属性(只需更改window为具有该属性的对象).

  • 也许它提醒/ log/document.write`console.trace()`提供更多信息 (2认同)