繁体   English   中英

检测用于调试的Firebug(或任何其他Web调试器)的时间

[英]Detect when is Firebug (or any other web-debugger) used for debugging

我有一个Javascript应用程序,它依赖于捕获textarea中的键盘事件。 在使用firebug(1.10.2)在Firefox(14.x)上测试和调试它时,我发现当我的断点处于活动状态并且调试器工作正常时,我的应用程序的行为会有所不同。

我知道如何检测Firebug,但我想知道是否可以检测(使用Javascript)Firebug实际用于调试时?

编辑:这是一些随机网站上的示例

此站点在输入框中捕获键事件,打印出字符代码并用文本表示替换按下的键(即输入键为“enter”)或大写字母(如果是字母)。

当我使用Chrome调试它并在侦听器函数上放置断点时,到达断点时没有任何反应(正如预期的那样),当我恢复脚本时,文本将正常打印出来。

当我在Firefox上使用Firebug进行调试时:让我们说之前我按下“e”字母,输入栏包含文本“E”。 我打开断点并按下字母“z”。 Firebug在断点处停止,但输入栏现在有文本“Ez”而不是“E”。 当我恢复脚本时,此文本将按预期替换为“Z”。

我尝试了另一个Firefox调试器(Venkman 0.9.89),同样的事情发生了。 所以我的猜测是这是一个Firefox问题,而不是调试器问题。 所以问题可能更一般,是否可以检测到Javascript代码何时被调试?

这是我检测Firebug的方法:

if (window.console && (window.console.firebug || window.console.exception)) {
  // At this point, Firebug is enabled
}

第一个测试对于确保控制台实际存在很重要第二个测试将测试Firebug,尽管它只适用于它的旧版本。 第三个是因为Firebug添加了“异常”这是因为属性“异常”是由Firebug的插件添加的。

(不相关但感兴趣: window.console.exception是Firebug用于在控制台上显示消息的方法。例如,键入:

>>> window.console.exception("A message", {param:'Value'})

您将看到一个看起来非常熟悉的错误,转储传递的对象!

芝加哥商业交易所。

好吧,希望这个答案对某人有帮助。

让我们调试的函数如下:

function debugged()
{
   debugger;
}
setTimeout(debugged, 3000);

添加此调试检测代码是:

setTimeout(this.x = function(a){ s = Math.abs(new Date() - a.c - 1000); a.c = new Date(); setTimeout(a.foo,1000, a); if(s>100)console.log("debug") },1000, {c: new Date(), foo:this.x})

因此,如果我们在某个地方运行它并打开调试器,它将触发断点并且将捕获调试事件(您可以通过控制台中出现的“debug”字来看到它)。 这是一个概念,您可以更改检测周期时间和提高调试标志的方法。 感谢单线程javascript。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM