小编前两天遇到了一个问题,现在来重现一下:
在我爬xx网站的前端代码,我打开控制台要看Network
,结果一打开控制台就不断的debugger,100ms
一次,就让我很头疼,完全看不到页面内容 图下:
然后小编冷静分析:
每次我再断点停下来的时候页面就会跳到source
这个tab
页面,也能够看到他的debugger
代码,
其实实现起来也不难,就一行代码
(function() {var a = new Date(); debugger; return new Date() - a > 100;}())
看起来是不是很简单,但是却很有效果
就是不停的打断你,然后跳到source
页面阻止我看到他的debugger
代码,不断的产生不可回收的对象,占用内存,造成内存泄漏,没过多久浏览器就会卡顿,所以带来的影响还是挺大的,我就准备解决一下这个问题
解决问题
其实这个问题解决起来也是很简单那就是:禁止断点
在chrome
控制台的source Tab
页点击Deactivate breakpoints
按钮或者按下ctrl+f8
图下:
这样就O了,问题就解决了,但是这个方法有点杀敌一千自损八百的意思,毕竟这样禁止断点我们以后也没办法调试网站了,那有什么办法可以满足我们既能阻止网站一直debugger
还能让我们继续调试网站的代码呢,那就要看网站怎么实现不断debugger
了有的网站就做的比较简单,类似:
setInterval(startDebug, 100); // 举个例子
function startDebug() { debugger; };
像这种情况的话就比较好解决,我们随便重新定义一下这个方法就行了,如下:
function startDebug() {};
也有些网站就厉害一点,用匿名函数来做的,例如:
setInterval(function () { debugger }, 100); // 举个例子
就在我为这个头疼的时候我一个朋友给我出了个解决方案:用条件断点来应对
setInterval(function () { debugger }, 100); // 举个例子
小编试了下,确实还ok但是又局限性,先说可以应对的情况,图下:
再来看看不能应对的情况,图下:
就是说条件断点的使用情况和集体代码的书写风格有关系,另外我发现Add conditional breakpoint
下面的Never pause here
也能在突破反调试的时候起到做用,局限性和Add conditional breakpoint
是一样的,用两个图来展示一下
能work
的情况:
不能work
的情况:
以上就是小编今天带来的内容
小编本身就是一名python开发工程师我自己花了三天时间整理了一套python学习教程从最基础的python脚本到web开发,爬虫,数据分析,数据可视化,机器学习,等,这些资料有想要的小伙伴 点击 即可领取