d8 是 v8 提供的用以 debug v8 的 shell ,因为 v8 自身就是一个库,不提供 console 的实现。d8 会在编译 v8 时顺便实现,不过我只想编译 d8 。

主要参考了 v81 文档和一篇博文2

代理工具

使用 tscoks

我平常喜欢用 proxychains ,但谷歌的工具在 proxychains 下都无法生效(动态库注入失败)。tsocks 相对较好(但比 proxychains 慢)。

获取仓库

首先要拉取 depot_tools ,然后把 depot_tools 仓库地址追加到 PATH 里。

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
PATH=PATH:/path/to/depot_tools

编译 v8 需要使用 ninja ,建议使用包管理器下载,因为各个系统都有。

完成上述工作我们便可以开始尝试获取 v8 的代码了。

gclient
fetch v8 # 获取v8 源码
gclient sync

记住用 tsocks 做代理,如果做了透明代理也行。

编译 d8

首先生成编译配置,

tools/dev/v8gen.py x64.debug

然后使用 ninja 进行编译,

ninja -C out.gn/x64.debug d8

此处我们只编译 d8 。

完成后,我们的 d8 在 ./out.gn/x64.debug 下。

生成 compile_commands.json

借助 ninja 完成。3

ninja -C ./out.gn/x64.debug d8 -t compdb > compile_commands.json

compile_commands.json 主要是为了更方便阅读代码。C++ 的 LSP 都支持这个。

我个人建议使用 clangd 做 LS ,比 ccls 好太多了。