【发布时间】:2012-08-15 09:25:39
【问题描述】:
我有一个 Javascript 应用程序,它依赖于在文本区域中捕获键盘事件。在使用 firebug (1.10.2) 在 Firefox (14.x) 上对其进行测试和调试时,我注意到当断点处于活动状态且调试器正在工作时,我的应用程序的行为有所不同。
我知道如何检测 Firebug,但我想知道当 Firebug 实际用于调试时是否可以检测(使用 Javascript)?
编辑:这是一些随机网站上的示例
This site 捕获输入框中的按键事件,打印出字符代码并将按下的键替换为文本表示(即“输入”表示回车键)或大写字母(如果是字母)。
当我使用 Chrome 调试它并在侦听器函数上放置一个断点时,到达断点时没有任何反应(如预期的那样),当我恢复脚本时,文本会正常打印出来。
当我在 Firefox 上使用 Firebug 对其进行调试时:假设之前我按下了“e”字母并且输入栏包含文本“E”。我打开断点并按字母“z”。 Firebug 在断点处停止,但输入栏现在有文本“Ez”而不是“E”。当我恢复脚本时,此文本将按预期替换为“Z”。
我尝试了另一个 Firefox 调试器(Venkman 0.9.89),同样的事情发生了。所以我的猜测是这是一个 Firefox 问题,而不是调试器问题。所以这个问题可能更笼统,能不能检测到什么时候调试的Javascript代码?
【问题讨论】:
-
这是一个非常奇怪的要求。您的应用程序的行为有何不同?也许您应该解决并修复您的应用程序的行为,而不是尝试解决它——它在被调试时通常不应该有不同的行为,而且它背后可能存在架构问题。那么那里的许多其他调试器呢?你必须把它们全部检测出来......
-
即使您没有断点或与非 Firebug 运行的其他差异,当 Firebug 工作时,它的工作方式是否有所不同?
-
我正在捕获事件、处理它并阻止它。在调试完成工作的方法时,事件实际上发生在我的方法被调用之前,因此我无法阻止它。由于我的应用程序在 Firebug 关闭时工作,我认为这种行为不是 Firefox 问题。我没有找到另一个调试器,谢谢你的想法!此外,虽然 Firebug 已打开但未调试,但一切正常。
-
任何最小的代码重现都会非常有帮助。尽量减少重现怪癖的代码量也将帮助您更好地理解正在发生的事情。 Ad Firebug,它在调试异步代码时效果不佳。如果你在某个地方停止调试器,同时有活动的
setTimeout被调用,Firebug 不会冻结时钟。请参阅此处了解更多信息:stackoverflow.com/a/11834880/245966
标签: javascript debugging firefox firebug