内容简介:Node.js 是基于发行版本的
Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.
Node.js 是基于 V8 和 libuv 进行构建的,底层是以 C/C++
实现,而标准库部分则是采用 JS
编写。所以 Node.js 的源码调试分为两部分, C/C++
代码调试和 JS
代码调试。更多...
准备工作
- Node.js 源码 一份
- Visual Studio Code 或其它调试
C/C++
、JS
的调试器/IDE
。
开始调试
编译
发行版本的 Node
是不支持调试的,所以我们需要自己通过源码构建一份可调试的 Node
, Node
项目构建通过 make
进行管理,开发者们贴心的准备好了 configure
文件,所以构建一个自己定制版的 Node
非常方便。
第一步:入口文件添加 debugger
首先,进入到下载下来的 Node.js 源码仓库目录(之后的操作都在这个目录进行)。
修改 JS
源码入口文件( ./lib/internal/bootstrap/node.js
)文件中的内容,在头部加入 debugger
。
'use strict'; debugger; // <<--- 在这里加入 debugger; // This file is compiled as if it's wrapped in a function with arguments // passed by node::RunBootstrapping() /* global process, require, internalBinding, isMainThread, ownsProcessState */ /* global primordials */ const { Object, Symbol } = primordials; const config = internalBinding('config'); const { deprecate } = require('internal/util'); setupProcessObject(); setupGlobalProxy(); setupBuffer(); 复制代码
第二步:执行编译
Node.js 使用 make 管理项目,开发者们准备了 configure 文件,我们只需要执行 ./configure
就可生成当前环境可用的编译默认配置,然后执行 make 进行编译。但是默认的编译配置是没有启用调试模式的,因此,我们需要在执行 ./configure
时加上 --debug
就可以生成可调试的编译配置项,然后再进行编译。
完整的命令如下:
#!/bin/bash ./configure --debug make -C out BUILDTYPE=Debug -j4 echo "showtime :tada:" 复制代码
因为此后我们每次修改文件都需要重新编译,所以我这里把这些命令写到了 build.sh
里,之后的修改需要重新编译时,执行一次这个文件就可以了。
执行这个文件之前,需要先给这个文件一个可执行的权限:
chmod +x build.sh 复制代码
完事具备,只需要在命令行输入 ./build.sh
就可以开始编译了,然后你就可以去冲杯:coffee:️了(coffee or tea? tea, pls)。 编译之后的文件你可以在 ./out/Debug/
目录下找到,里面的 Node
文件就是我们所需要的了。
调试 JS 源码
第一步:准备一份测试文件
创建一个用于调试的项目/文件,里面随便写上一些什么,当然,你也可以用现成已经有的项目/文件。 为了方便,我就在 Node.js
的源码仓库目录下面创建了一个文件:
console.log('hello world'); 复制代码
第二步:启动服务
现在让我们用编译出来的 Node
执行这个文件:
./out/Debug/Node --inspect-brk=9229 test.js 复制代码
看到如下提示就说明你的服务已经启用并处于可调试状态:
Debugger listening on ws://127.0.0.1:9229/0aeaa4ec-113b-4e08-94d9-0477c61d59ac For help, see: https://nodejs.org/en/docs/inspector 复制代码
第三步:调试
接下来我们完成另外一半,用安装好的 Visual Studio Code
打开你的项目
点击左侧的蜘蛛标志,进入调试配置界面,然后点击右上角的配置按钮(打开目录下的 .vscode/launch.json
)
注意:Visual Studio Code 需要打开一个项目时才能够创建配置文件
在配置文件中填入如下内容:
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "attach", "name": "Attact Program", "port": 9229 } ] } 复制代码
切记,记得进行保存。回到设置界面选择刚刚配置的 "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 需要打开一个目录才能够创建配置文件
在配置文件中填入如下内容:
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(lldb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/out/Debug/Node", "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "lldb" } ] } 复制代码
切记,记得进行保存。
然后用 IDE 在 C/C++
入口文件处 ./src/node_mian.cc
打上 debugger 标识。 回到设置界面选择刚刚配置的 "Attact Program",然后点击绿色的三角标开始,然后你就可以进入到 Node.js
源码中 C/C++
部分的调试了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang源码探索(一) 编译和调试源码
- 使用gdb调试工具上手调试php和swoole源码
- JVM源码分析-JVM源码编译与调试
- 调试 Flink 源码
- 如何断点调试Tomcat源码
- Skywalking流程简析及源码调试
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and
George F. Luger、William A Stubblefield / Addison Wesley / 2008-09-04 / USD 22.20
This book is designed for three primary purposes. The first is as a programming language component of a general class in Artificial Intelligence. From this viewpoint, the authors see as essential that......一起来看看 《AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and 》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
html转js在线工具
html转js在线工具