firebug和webkit浏览器中的内置控制台都可以在运行Javascript代码时设置断点,因此您可以像使用任何其他语言一样调试它。
我想知道的是,是否有任何方法可以指示firebug或webkit我想在运行时在文件Y中的第X行设置断点,并且能够检查特定范围内的变量我暂停了。
我需要能够在Chrome(或任何其他webkit浏览器)和Firefox中运行的东西。对于后者,Firebug是可接受的依赖。支持IE不是必需的。
我一直在构建一个浏览器内的IDE(感兴趣的快速视频:http://www.youtube.com/watch?v=c5lGwqi8L_g),并希望给它更多的肉。
我尝试过的一件事就是添加debugger;
作为用户设置的额外行,但这不是一个理想的解决方案。
答案 0 :(得分:5)
我认为你肯定可以使用远程调试协议为webkit浏览器做这件事。这是基于websocket连接和来回的json消息协议。
您可以阅读announcement和整个protocol schema。
Chrome还在其remote developer-tools docs内提供了有关此内容的更多信息。
例如,对于debugger domain,您可以看到如何使用Debugger.setBreakpoint,Debugger.setBreakpointByUrl和Debugger.setBreakpointsActive来处理断点。
另一方面,正如您在https://developer.mozilla.org/en-US/docs/Tools/Debugger-API和https://wiki.mozilla.org/Remote_Debugging_Protocol中看到的那样,Mozilla似乎正在努力解决这个问题,尽管我不知道它的完成状态。
在这种情况下,您可以使用Debugger.Script API setBreakPoint,getBreakPoint,getBreakpoints,clearBreakpoints和clearAllBreakpoints来处理断点
我希望这可以帮助你前进。
答案 1 :(得分:1)
没有这样的事情,至少不使用JavaScript的公共可编写脚本的一面。如果您拥有可以为您执行此操作的特权浏览器扩展,那么这是可能的。例如,Firebug有一个debug method,您可以从其命令行调用,但不能从页面内的脚本调用。
所以,你有两个解决方案:
答案 2 :(得分:0)
使用_defineSetter__
观看变量,并在分配发生时将其与对debugger
的调用相结合。
__defineSetter__("name", function() { debugger; });
或defineProperty:
function setter () { debugger; }
Object.defineProperty(Math, 'name', { set: setter });
<强>参考强>