Chrome JavaScript Debugging: how to break when a value changes

后端 未结 3 1372
梦谈多话
梦谈多话 2020-12-14 10:48

I am debugging a large JavaScript code base where, at some point, the \"console\" variable gets nulled when refreshing the page.

Is there a way to set a watch on con

3条回答
  •  庸人自扰
    2020-12-14 11:29

    The answer below doesn't work for window.console because console (like other browser-native environment variables) is treated specially. Any attempt to assign a value to console only "covers up" the original value; it does not replace it. You can't detect when the console value changes, but you can delete window.console to restore the original environment-supplied value.

    For other values, use Object.defineProperty to define a custom setter for some global window.foobar. The setter function runs whenever window.foobar is assigned a new value:

    (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; }
        });
    
    })();
    

    Then, put a breakpoint in that setter function.

    This approach will work for global variables or any object property (simply change window to the object that has the property).

提交回复
热议问题