您的位置:首页 > 编程语言

搭建V8代码的阅读兼开发环境

2012-06-25 17:05 309 查看
新版本的V8不再包含IDE的工程文件了,scons工具也要转向gyp工具,

(scons还是可以用的,注意scons和gyp都是基于python2的, python3修改了语法.

scons和gyp无法使用,不过你不必卸载原先的python3,多装一个python2即可.)

gyp我因为python3的原因折腾了小久python语法,改用scons + python2 成功之后,

也没去尝试 gyp + python2,而且我还未彻底明确如何安装gyp,好歹scons还提供个安装文件,

自动复制到python目录下. =.=|| 既然scons还能很方便的使用,就先不自找麻烦了.)

现在makefile种类越来越多了,这make那make的,这perl脚本那python脚本的,各有各的优秀之处,

各都有各的 大爷级项目 在背后使用它们支持它们.做个程序员真命苦.

下载svn(windows上为TortoiseSVN)

下载python 2.7.msi (不要下载python 3)其官网长期跪伏于党威.自己找国内的下载了.

下载scons (最新的是 2.1)

安装SVN 安装python 2.7 安装scons 加环境变量.

在命令行里确认敲svn, python, scons(或 D:\Python27\Scripts\scons.bat) 都有反应

下载V8

svn checkout http://v8.googlecode.com/svn/trunk/ v8

(末尾的V8为保存目录的相对地址,可以先cd到合适的位置运行svn)

打开VS

文件->新建-->从现有代码创建项目-->VC++

项目文件位置: G:\v8 (下载的V8源代码的根目录位置)

注意: 要保证sln文件在代码根目录处,因为scons的配置文件SConstruct在这个位置. ***.sln要和它在一起.

选择要过滤的文件类型. 如果时间多,指定具体的子目录会更明确一些.

填写项目名称(如V8) 把 显示所有文件 勾掉, 不然很多与代码无关的文件看起来很烦.

然后下一步到 如何生成项目

勾选 使用外部生成系统

调试

生成命令行这里填写:

D:\Python27\Scripts\scons.bat env="PATH:D:\Program Files\Microsoft Visual Studio 8\VC\bin;D:\Program Files\Microsoft Visual Studio 8\Common7\IDE;D:\Program Files\Microsoft Visual Studio 8\Common7\Tools,INCLUDE:D: \Program Files\Microsoft Visual Studio 8\VC\include;D:\Program
Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include,LIB:D:\Program Files\Microsoft Visual Studio 8\VC\lib;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib" libary=shared mode=debug msvcrt=shared

清除命令行写:

D:\Python27\Scripts\scons.bat -c 即可

(注意D:\Python27\Scripts\scons.bat是我的scons存放位置,按道理若D:\Python27\Scripts已添加到环境变量中的话,

仅仅写scons就可以)

libary要写shared. static超级巨大,可别自讨没趣.V8用dll更合适. msvcrt选shared更是正常的选择.

如果你安装了多个vs, 就需要再这里详细的罗列出VS的位置,否则soncs会自己去找,一般找到的是最新版本的VS.

我装了VS2005和VS2008但我更喜欢VS2005 所以命令行指定的很长.如果头文件和lib的包含有什么状况,可能都需要你照葫芦画瓢改改这里. 你如果仅有一个VS,那么生成命令行写 scons libary=shared mode=debug msvcrt=shared 即可. 如果是双核CPU 可以 soncs libary=shared mode=debug msvcrt=shared -j2 并行2路进行编译.

注意 release版本与debug版本命令行写法一样 除了mode=release

需要勾掉 与"调试"配置相同

然后保存工程. V8 工程就完全创建好啦~~

以后如果要修改命令行,右键属性--配置属性--NMake 即可,更复杂的就手动修改vcproj文件.

注意修改VS编译相关的项目配置是没用的,scons通过命令行参数和脚本有自己的设置.

创建一个开发环境.

点开上面保存的解决方案 ***.sln. 添加新的控制台项目test_v8到V8解决方案 .

设置test_v8为启动项目,设置它依赖于V8项目. 在test_v8下创建main.cpp

内容:(网上复制来修改的)

#include <iostream>

#include "../include/v8.h" //根据自己的情况选择好文件位置,或者修改项目头文件路径

#ifdef _DEBUG

#pragma comment(lib,"../v8_g.lib")

#else

#pragma comment(lib,"../v8.lib")

#endif

//v8 need this 使用V8需要链接ws2_32.lib和winmm.lib

#pragma comment( lib,"ws2_32.lib" )

#pragma comment(lib,"winmm.lib")

using namespace v8;

int main(int argc, char* argv[]) {

// Create a stack-allocated handle scope.

HandleScope handle_scope;

// Create a new context.

Persistent<Context> context = Context::New();

// Enter the created context for compiling and

// running the hello world script.

Context::Scope context_scope(context);

// Create a string containing the JavaScript source code.

Handle<String> source = String::New("'Hello' + ', World!'");

// Compile the source code.

Handle<Script> script = Script::Compile(source);

// Run the script to get the result.

Handle<Value> result = script->Run();

// Dispose the persistent context.

context.Dispose();

// Convert the result to an ASCII string and print it.

String::AsciiValue ascii(result);

printf("%s\n", *ascii);

return 0;

}

然后按F7编译. 2010年之后的机器一般几分钟就编译完.

然后在V8项目中找到 src/handles.cc加断点于下面这个函数:

Handle<Object> GetProperty(Handle<JSReceiver> obj,

const char* name)

然后F5, OK. 命中断点. 现在V8的一切就完全在你眼前.

你可以开始 美滋滋 的阅读/调试/使用 V8的代码了.
http://www.docin.com/p-233815351.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: