过瑞数中的高级debugger
(function() { var a = new Date(); debugger ;return new Date() - a > 100; }())
这种debugger 如果是用‘一律不在此处暂停’是过不去的。

要在浏览器的控制台中执行并阻止 debugger 语句,你可以使用 JavaScript 的 toString() 方法来重写原函数的定义。
这种方法更复杂,因为它需要操纵函数的字符串表示形式,但它可以在不直接修改原始代码的情况下绕过 debugger。
这里是一个示例代码,它展示了如何通过重写 Function.prototype.toString 方法来实现这一目的:
(function() { // 保存原始的 toString 方法 var originalToString = Function.prototype.toString; // 重写 toString 方法 Function.prototype.toString = function() { var originalCode = originalToString.call(this); // 检查并移除 debugger 语句 var modifiedCode = originalCode.replace(/debugger;/g, ''); return modifiedCode; }; // 假设这是要绕过的原始函数 var originalFunction = function() { var a = new Date(); debugger; return new Date() - a > 100; }; // 测试重写后的函数 console.log(originalFunction.toString()); console.log(originalFunction()); })();
详细中文注释:
-
var originalToString = Function.prototype.toString;:保存原始的toString方法,以便于在重写的方法中调用。 -
Function.prototype.toString = function() {...}:重写Function对象的toString方法。任何函数调用toString方法时,都会调用这个新的方法。 -
var originalCode = originalToString.call(this);:通过原始的toString方法获取当前函数的源代码。 -
var modifiedCode = originalCode.replace(/debugger;/g, '');:使用正则表达式移除源代码中的所有debugger;语句。 -
var originalFunction = function() {...}:这是你想要绕过的原始函数。 -
console.log(originalFunction.toString());和console.log(originalFunction());:分别测试重写后的toString方法和修改后的函数执行。
当你在浏览器控制台中运行这段代码时,它将重写 Function.prototype.toString 方法,并自动移除任何函数的 debugger; 语句。这样,即使原始函数包含 debugger 语句,它也不会触发调试器暂停。

浙公网安备 33010602011771号