2011-05-01 87 views
2

我想看看JavaScript解释器正在做什么,它正在阅读哪一行以及它正在运行哪个函数,因为我想对JavaScript的每一小段进行全面调试,以使其更快。为此我需要一些工具来告诉我解释器正在做什么,如果它定义了一个变量,如果它正在运行一个函数,如果它在一个循环中,检查当前的时间间隔(在setInterval中定义)。是否可以实时关注JavaScript?

据我所知Firebug无法做到这一点。

+3

即使在慢速字节码解释器上,你也很难遵循它,因为它太快甚至不能渲染,更别说被你识别了。如此,使用现代JS引擎进行JIT编译。分析工具像往常一样运行程序有一个原因,之后将收集的度量标准作为静态文本提供给您。 – delnan 2011-05-01 12:47:02

+0

我不认为它不会那么困难,但在其他语言中很难,但Javascript是实时语言,它在那里完成所有工作,所以它可以直接说出它在做什么。 – Grego 2011-05-01 12:58:36

+0

尝试运行一个比大多数真实JS应用程序执行更多计算的程序,例如[这是我头顶的片段](http://pastebin.com/w0T3Chzs)。它在我的机器上“立即”完成(不到一秒钟),这是一台运行Firefox 4的非常旧的电脑。这是数十万行数学计算,将数字转换为字符串并将字符串连接起来。它在不到一秒钟内完成。你怎么能希望你写过的任何一行,甚至是循环都要比这更长,并且因此足够长,以便用平淡的眼睛观察? – delnan 2011-05-01 13:14:21

回答

0

如果您希望对程序进行自动监控/分析,请查看Chrome的Debugger Protocol。它提供了一个程序化API。我相信(但可能是错误的),这就是像Web Inspector和node-inspector这样的工具所构建的。

如果你想要的东西比建立标准的Firebug/Web Inspector接口更多,你将不得不使用类似的东西,或者开始攻击V8和Gecko JS解释器的内部。

6

查看Firebug中的javascript选项卡,它是一个完整的调试器。设置一个中断点,当你的代码到达这一行时,你将有完整的调试访问变量等.Chrome在developer tools中有类似的功能,这些功能都包含在标准安装中。

+1

更不用说,一旦你达到了转折点,你可以单步执行,在每行代码之后检查变量的状态等。 – 2011-05-01 12:48:52

+0

我想在运行时看到完整的日志,这就是为什么Firebug不适合这样做,我不想为某些特定点设置断点,因为我希望它显示活动执行时的所有日志,所以我可以看到JavaScript正在做什么,因为我正在访问它,并在浏览器中运行它 – Grego 2011-05-01 12:57:17

0

正如另一个答案所说,如果你想要一步一步来,设置一个调试点是要走的路。

但是,由于您似乎对提高性能感兴趣,所以您可能需要考虑仅优化应用程序中的真正瓶颈。要查看哪些功能最需要运行,请参阅console.profile()(可在萤火虫和Chrome中使用)。

下面是一个例子:

console.profile('myProfile'); 
//some code you want to know more about 
console.profileEnd(); 

您也可以手动点击档案按钮,在控制台面板(萤火虫)/个人资料面板(铬)

在Chrome中启动它可能还想看看Heap Snapshots(他们告诉你关于内存使用情况)。

相关问题