问题再现
无限debbugger不会真正得死循环,而是有规律得执行逻辑,一般用定时器,例如:
<!DOCTYPE html>
<html lang="en">
<h1 id="aa"></h1>
<body>
<script>
var aaa = document.getElementById('aa')
function a() {
debugger;
}
setInterval(a,100);
aaa.innerHTML = "hello world";
</script>
</body>
</html>
解决方式
浏览器过debugger
当定义器运行到这个debugger这个代码的时候,那么这个时候它为true,它肯定执行debugger代码,那么可以用浏览器的功能给他改成false,如下图所示:
首先,右键debugger所在的行号,选择添加条件断点。
接着,将值设为false,此时再继续执行则不会再在此处debugger了。此外,也可以直接点上图中的一律不再此处暂停。也可以达到同样的效果。
方法置空
无限debugger产生的原因是a这个函数造成的,所以我们可以重写这个函数,使无限debugger失效.在控制台中输入function a(){}即可,
注:一定要在debugger进入之前
修改响应文件
把JS文件保存到本地修改,修改范围主要是将debugger相关的代码删除或者改写,可以使用文件替换、抓包工具拦截方式。
注入代码到JS文件
var a_constructor = constructor;
Function.prototype.constructor = function(a) {
if (a == "debugger") {
return null;
}
return a _constructor(a);
}