Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端基础

    • 编程语言

    • 开发工具

    • 前端调试

    • 浏览器原理

      • V8 执行引擎

        • Devtools Console 面板输入了 1+1 ,浏览器内部发生了什么?
        • V8源码解析之Array.prototype.sort
        • V8源码解析之String.prototype.indexOf
        • VSCode 调试 V8 源码
          • hint
          • 需求
          • 下载
          • 编译
          • debug
          • v8 基础知识
          • 实例分析
          • vscode
          • 参考文档
        • 浅谈 V8 的垃圾回收
        • macOS 上使用 lldb 和 gdb
        • 从「消失的 1 千粉丝」谈及 toFixed 的坑
      • 渲染机制

    • 浏览器生态

  • 应用框架

  • 工程能力

  • 应用基础

  • 专业领域

  • 业务场景

  • 大前端
  • 前端基础
  • 浏览器原理
  • V8 执行引擎
gahing
2020-07-12
目录
hint
需求
下载
编译
debug
v8 基础知识
实例分析
vscode
参考文档

VSCode 调试 V8 源码草稿

# hint

发现 linux or macos 上调试 v8 较麻烦,后面直接调试 JavaScriptCore 了

win 上可以用 vs 调试,后面有机会可以看看

# 需求

看懂 js 方法里的某些原生实现一直是我的梦想,正好最近有个契机,看了网上很多文章,总结的技巧

调试某个方法,可以看到每个 v8 中执行的每一步

时效性

# 下载

官方文档: https://v8.dev/docs/source-code

# 进一个你要测试的目录,后面拉的工具和代码都放此目录下, 测试机我直接放 ~ 了
cd /path/to/your_test_dir
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:~/depot_tools
gclient config https://chromium.googlesource.com/v8/v8
gclient sync

# 又拉了一遍? 这个步骤应该不需要
mkdir ~/v8
cd ~/v8
fetch v8
cd v8

# linux 上需要执行此步骤,下载依赖
sudo ./build/install-build-deps.sh
# 根据提示安装某些安装包?执行以下命令
sudo dpkg --configure -a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

macOS 坑

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

xcode-select active developer directory error (opens new window)

# 编译

https://v8.dev/docs/build

官方文档见 https://v8.dev/docs/build-gn

export PATH=/Users/bytedance/Repos/test/depot_tools:$PATH

# alias gm=/path/to/v8/tools/dev/gm.py
alias gm=~/v8/tools/dev/gm.py
gm x64.release
gm x64.release.check
gm x64.debug
1
2
3
4
5
6
7

# debug

# 使用 d8 输出运行结果(类似 node)
./out/x64.debug/d8  test.js
# 或者先进入 d8 ,可以执行 js 代码
./out/x64.debug/d8

# 使用 gdb 调试  -q:不带版本号等无用输出
gdb -q ./out/x64.debug/d8
# 注意需要指定这个!?
gdb -q ./out/x64.debug/d8 -x ./tools/gdbinit 
# 主功能汇编代码?
disassemble main
# 使用 gdb debug test.js
r --allow_natives_syntax ./test.js
# 查看内存
x/gx [elements内存地址]
# 设置断点
b v8::base::ieee754::cosh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# v8 基础知识

Iso

# 实例分析

# vscode

安装相关插件:C/C++ Clang,C++ Intellisense,C/C++ 配置launch.json,当中配置成gdb即可

https://v8.dev/docs/ide-setup

只看代码分析,支持跳转

https://source.chromium.org/chromium/chromium/src/+/master:v8

# 参考文档

  • v8 docs (opens new window)

https://www.youtube.com/watch?v=HimbmR7e4dk

  • [V8]使用VS Code调试V8代码 (opens new window)
  • Node.js 调试 源码 (opens new window)
  • V8代码编译 (opens new window)
编辑 (opens new window)
上次更新: 2023/08/23, 09:32:05
V8源码解析之String.prototype.indexOf
浅谈 V8 的垃圾回收

← V8源码解析之String.prototype.indexOf 浅谈 V8 的垃圾回收→

最近更新
01
浅谈代码质量与量化指标
08-27
02
快速理解 JS 装饰器
08-26
03
Vue 项目中的 data-v-xxx 是怎么生成的
09-19
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式