在Javascript中在运行时动态设置断点

时间:2012-08-20 15:31:32

标签: javascript debugging webkit firebug breakpoints

firebug和webkit浏览器中的内置控制台都可以在运行Javascript代码时设置断点,因此您可以像使用任何其他语言一样调试它。

我想知道的是,是否有任何方法可以指示firebug或webkit我想在运行时在文件Y中的第X行设置断点,并且能够检查特定范围内的变量我暂停了。

我需要能够在Chrome(或任何其他webkit浏览器)和Firefox中运行的东西。对于后者,Firebug是可接受的依赖。支持IE不是必需的。

我一直在构建一个浏览器内的IDE(感兴趣的快速视频:http://www.youtube.com/watch?v=c5lGwqi8L_g),并希望给它更多的肉。

我尝试过的一件事就是添加debugger;作为用户设置的额外行,但这不是一个理想的解决方案。

3 个答案:

答案 0 :(得分:5)

我认为你肯定可以使用远程调试协议为webkit浏览器做这件事。这是基于websocket连接和来回的json消息协议。

您可以阅读announcement和整个protocol schema

Chrome还在其remote developer-tools docs内提供了有关此内容的更多信息。

例如,对于debugger domain,您可以看到如何使用Debugger.setBreakpointDebugger.setBreakpointByUrlDebugger.setBreakpointsActive来处理断点。

另一方面,正如您在https://developer.mozilla.org/en-US/docs/Tools/Debugger-APIhttps://wiki.mozilla.org/Remote_Debugging_Protocol中看到的那样,Mozilla似乎正在努力解决这个问题,尽管我不知道它的完成状态。

在这种情况下,您可以使用Debugger.Script API setBreakPoint,getBreakPoint,getBreakpoints,clearBreakpoints和clearAllBreakpoints来处理断点

我希望这可以帮助你前进。

答案 1 :(得分:1)

没有这样的事情,至少不使用JavaScript的公共可编写脚本的一面。如果您拥有可以为您执行此操作的特权浏览器扩展,那么这是可能的。例如,Firebug有一个debug method,您可以从其命令行调用,但不能从页面内的脚本调用。

所以,你有两个解决方案:

  1. 实现您自己的JavaScript解释器,您可以根据需要进行控制。可能有点过于雄心勃勃,但是......
  2. 依赖于可在代码中的任何位置设置断点的浏览器扩展,将一些API公开给公共代码,并通过JavaScript与其进行交互。但这意味着用户必须先安装一些额外的软件才能使用“Web IDE”。

答案 2 :(得分:0)

使用_defineSetter__观看变量,并在分配发生时将其与对debugger的调用相结合。

__defineSetter__("name", function() { debugger; });

或defineProperty:

function setter () { debugger; }

Object.defineProperty(Math, 'name', { set: setter });

<强>参考