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

来源:互联网 发布:apache 泛解析配置 编辑:程序博客网 时间:2024/06/04 19:56
新版本的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


原创粉丝点击