Для нужного свойства мы переопределяем сеттер и геттер и в сеттере совершаем какую-то ошибку, например делаем сложение с необъявленной переменой:
Object.defineProperties(MyVObject.prototype, { visible: { get: function() { return this.__visible; } , set: function(value) { console.log("MyVObject visible set", value); if(value) { var a = b + 7; // переменная b не объявлена и ее использование вызовет ReferenceError } this.__visible = value; } } });
Теперь при установке свойства объекта в true сработает ошибка, которую покажет консоль и мы сможем увидеть весь путь вызовов функций и методов, который привел к этой ошибке. Профит.