本帖最后由 Hengstar 于 2012-11-18 21:38 编辑
----------------------------------开始体验-------------------------------- 先解释一下,Google提供的这个调试插件是remote调试插件。也就是说,调试器和被调试应用程序是通过网络通讯的方式传递调试信息的。所以调试器和被调试程序实际上是两个进程。也正因为如此,调试时需要有些同步加锁的过程。不过Google都已经封装的比较简化了,使用起来还是比较简单的。而且还支持直接和Chrome浏览器通讯调试web程序,详细请参考 http://code.google.com/p/chromedevtools/wiki/DebuggerTutorial 先用官方提供的示例体验一下调试过程吧。 先进入v8的编译目录下的输出路径(v8/out/native/)。里面应该能看到一个lineprocessor的文件,这是v8已经编译好的一个sample程序。先在该目录下新建一个test.js文件(文件名可以随意取)。文件内容如下:
function ProcessLine(line) { var a = 10; var b = 11; c = a + b; // 这行目前是必须的,上面几行是我为了测试显示变量值随意加进去的,可以自行改 return line.toUpperCase(); } 保存后在控制台执行lineprocessor程序 ./lineprocessor test.js -p 9222 --main-cycle-in-cpp --callback 如果是直接执行程序(不通过控制台),则需要加入参数 test.js -p 9222 --main-cycle-in-cpp --callback 9222是端口号,也是可以自己改变的。 该程序会循环执行你刚刚编写的脚本,从控制台获取一行输入,转成大写后输出。 现在先不用管程序,准备开始启动调试器。先打开Eclipse,选择菜单Run->Debug Configurations 按下图中的窗口所示,选中Standalone V8 VM,再在左上角单击New configuration图标。新建一个调试配置项。配置按图中所示
配置完后单击右下角的Apply按钮,然后单击右下角的Debug按钮开始挂接。挂接完成后注意看Eclipse左边Project Explore窗口
刚才配置的New_configuration想被动态添加到这里了,连相关的脚本都被copy过来了(所有被执行到的脚本都会被拷贝到这里,这不禁让我想起当年调试lua的时候似乎也是类似的机制)。这时候在Eclipse中双击test.js打开脚本编辑。先尝试暂停程序的执行吧。单击Eclipse上面的暂停按钮,程序停下来了。记得要把右上角的视图切换为Debug视图。 然后打开 打开Expressions窗口。在窗口中随意输入一些JS脚本试试。比如试试下面的:
神奇吧。不过这还不算什么,下面试试我们都比较喜欢的断点功能。这里需要注意的是一定要将断点类型切换为v8 breakpoint才行。在菜单Run里面选择Breakpoint Types->Chrome/V8 breakpoints
然后在Eclipse代码窗口中左边空白处你要加断点的行双击 左边那个蓝色的点就是断点。 接下来让程序执行到断点处吧。(记得先恢复暂停的程序执行,用F8或者单击上面的按钮)。打开被调试程序运行的控制台,随便输入一些文字回车,断点断到了!然后把鼠标停留在你想要查看的变量上面就会显示相应的变量的值,简单类型到复杂类型的值都能看到!更神奇的是还能看js的调用堆栈。这里因为只有一个js函数调用所以没有堆栈信息。更多调试细节参考: http://code.google.com/p/v8/wiki/AddDebuggerSupport http://code.google.com/p/chromedevtools/wiki/EclipseDebuggerFeatures
-----------------------展望Google v8在项目中的应用----------------------- 既然v8这么powerful为什么不用它直接取代SpiderMonkey呢?我之前也有这个疑问,后来据说因为使用了v8的客户端在发布Apple程序的时候验证会失败。具体原因有好几种说法,我也没见到过,所以暂且不讨论。不过我个人认为总会有办法解决这个问题的。但是对于服务器端开发来说不受这个限制,所以我打算先移植到服务器端使用。今天已经尝试成功了,改动也不会很大。但是带来的便利是可想而知的,姑且不论效率的改善。关于v8和SPII引擎的整合还得先过了Apple验证这关才有可能做。不过如果能早日一统江山相信对大家都是一个福音啊!
发现写的有点多了。关于具体如何把v8嵌入到项目中使用,和一些v8的使用、优化等问题我想留到下次有时间再来写了。大家有兴趣也可以多参考下官方的文档。也可以和我一起线下交流。最好的学习办法是文档结合sample代码来看(sample源码路径在v8/samples)。相信上手很快的。 |