一次扒某网站的前端代码,打开控制台要看Network,结果发现他们页面一打开控制台就不断的debugger
,100ms
一次,很影响看页面内容。就像下面这样的前端
每次在断点处停下来的时候页面都会跳到source
这个tab页面,也可以看到他的debugger
的代码,其实他的实现很简单,只有这一行代码segmentfault
(function() {var a = new Date(); debugger; return new Date() - a > 100;}())
虽然简单,可是却颇有效。浏览器
因此他带来的影响仍是挺大的,咱们须要解决这个问题。函数
这个问题解决起来仍是蛮简单的,问题解决只须要一句话:禁止断点。
而对应的操做是在Chrome控制台
的Source Tab页
点击Deactivate breakpoints
按钮或者按下Ctrl + f8
(下图)。网站
这样就能禁用断点了,问题就获得了解决,可是当你须要调试的时候记得要起他哦。很简单的操做,可是你若是对Chrome控制台调试
不熟悉的话仍是比较头疼的。在这里记录一下,分享给更多的人。spa
后来发现这种作法有时候有些不妥,就好比有咱们看别人网站代码有时候就是为了调试网站的代码,那么这时咱们这么直接干脆的禁止断点后咱们也没办法调试网站的代码了,那这就有点杀敌一千自损八百的意思。那有什么办法能够知足咱们既能阻止网站一直debugger
还能让咱们继续调试网站的代码呢?这就要看网站怎么实现不断debugger
了:
有的网站作的比较简单,是用具名函数作的,相似这样debug
setInterval(startDebug, 100); // 举个例子而已,不少网站并非这么实现的
调试
function startDebug() { debugger; };
code
这种状况比较好解决,咱们随便从新定义这个方法就好了,形如:对象
function startDebug() {};
可是也有的网站作的比较厉害点,用匿名函数来实现,形如:
setInterval(function () { debugger }, 100); // 举个例子而已,不少网站并非这么实现的
这种状况就比较蛋疼了,目前我是没啥解决方法,若是有人知道的话,不妨在下面留言了。
下面有位老兄(@XYShaoKang)提到用条件断点
来应对这样的实现
setInterval(function () { debugger }, 100); // 举个例子而已,不少网站并非这么实现的
我试了下,确实能够,可是有局限性。
先说能够应对的状况,一个动图说明问题。
再来讲说不能应对的状况,仍是一个动图说明问题。
也就是说,条件端点的适用状况与具体代码的书写风格有关系。
另外,我发现Add conditional breakpoint
下面的Never pause here
也能在突破反调试的时候也能起到必定做用。局限性与上Add conditional breakpoint
同样。
一样用两个动图说明问题。
能work的状况
不能work的状况