Node.js 源码调试

原创 前端开发者 随笔 前端 88阅读 17 天前 举报

任何信息的价值都有时效性和适用性,本文写时 Node.js 的最新发行版是 v11.14.0LTSv10.15.3,文中出现的源码均来自 tag: v11.14.0。使用的电脑环境是:macOs 10.14.2。

前言

Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.

Node.js 是基于 V8libuv 进行构建的,底层是以 C/C++ 实现,而标准库部分则是采用 JS 编写。所以 Node.js 的源码调试分为两部分,C/C++ 代码调试和 JS 代码调试。更多...

准备工作

  1. Node.js 源码一份
  2. Visual Studio Code 或其它调试 C/C++JS调试器/IDE

开始调试

编译

发行版本的 Node 是不支持调试的,所以我们需要自己通过源码构建一份可调试的 NodeNode 项目构建通过 make 进行管理,开发者们贴心的准备好了 configure 文件,所以构建一个自己定制版的 Node 非常方便。

官方构建指南

第一步:入口文件添加 debugger

首先,进入到下载下来的 Node.js 源码仓库目录(之后的操作都在这个目录进行)。

修改 JS 源码入口文件(./lib/internal/bootstrap/node.js)文件中的内容,在头部加入 debugger

第二步:执行编译

Node.js 使用 make 管理项目,开发者们准备了 configure 文件,我们只需要执行 ./configure 就可生成当前环境可用的编译默认配置,然后执行 make 进行编译。但是默认的编译配置是没有启用调试模式的,因此,我们需要在执行 ./configure 时加上 --debug 就可以生成可调试的编译配置项,然后再进行编译。

完整的命令如下:

因为此后我们每次修改文件都需要重新编译,所以我这里把这些命令写到了 build.sh 里,之后的修改需要重新编译时,执行一次这个文件就可以了。

执行这个文件之前,需要先给这个文件一个可执行的权限:

完事具备,只需要在命令行输入 ./build.sh 就可以开始编译了,然后你就可以去冲杯☕️了(coffee or tea? tea, pls)。   编译之后的文件你可以在 ./out/Debug/ 目录下找到,里面的 Node 文件就是我们所需要的了。

调试 JS 源码

第一步:准备一份测试文件

创建一个用于调试的项目/文件,里面随便写上一些什么,当然,你也可以用现成已经有的项目/文件。 为了方便,我就在 Node.js 的源码仓库目录下面创建了一个文件:

第二步:启动服务

现在让我们用编译出来的 Node 执行这个文件:

看到如下提示就说明你的服务已经启用并处于可调试状态:

第三步:调试

接下来我们完成另外一半,用安装好的 Visual Studio Code 打开你的项目

点击左侧的蜘蛛标志,进入调试配置界面,然后点击右上角的配置按钮(打开目录下的 .vscode/launch.json)

注意:Visual Studio Code 需要打开一个项目时才能够创建配置文件

在配置文件中填入如下内容:

切记,记得进行保存。回到设置界面选择刚刚配置的 "Attact Program",然后点击绿色的三角标开始,然后你就可以进入到 Node.js 源码中 JS 部分的调试了。

之后每次改动你的代码的时候都记得执行以下 build.sh 重新执行编译。

关于 vscode 中 JS 的更多调试姿势请看这里

调试 C/C++ 源码

安装插件

Visual Studio Code 默认是不支持 C/C++ 调试的,需要安装对应的插件,打开 Visual Studio Code 的插件商店, 搜索 c++,安装名为 C/C++ 的官方插件

调试

同 JS 部分一样,打开安装好的 Visual Studio Code 打开你的项目

点击左侧的蜘蛛标志,进入调试配置界面,然后点击右上角的配置按钮(打开目录下的 .vscode/launch.json)

注意:Visual Studio Code 需要打开一个目录才能够创建配置文件

在配置文件中填入如下内容:

切记,记得进行保存。

然后用 IDE 在 C/C++ 入口文件处 ./src/node_mian.cc 打上 debugger 标识。 回到设置界面选择刚刚配置的 "Attact Program",然后点击绿色的三角标开始,然后你就可以进入到 Node.js 源码中 C/C++ 部分的调试了。

结语

感谢您的观看,如有不足之处,欢迎批评指正。
获取资料👈👈👈
本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
对web开发技术感兴趣的同学,欢迎加入Q群:👉👉👉582735936 👈👈👈,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复