专栏首页RunhwGuo的Coding之路Node.js源码学习——搭建阅读调试代码环境
原创

Node.js源码学习——搭建阅读调试代码环境

前提条件

源码学习,是要建立在一定基础上的,就Node.js而言,要满足一下条件:

  • 熟悉JavaScript语言
  • 熟练Node.js服务端开发
  • 熟悉C++语言
  • 熟悉JS/C++调试

搭建步骤

如果满足以上条件,那么我们就开始本系列的第一章,搭建环境;

1. 下载Node.js的github项目

  • 阅读Node.js的README.md
  • 初步弄清楚每个目录的文件作用

2. 搭建阅读/调试环境

  • 阅读BUILDING.md,编译Debug版的Node执行文件
  • 选择JS/C++的IDE,笔者选择CLion(C++),WebStorm(JS)
  • 配置调试参数

3. 阅读&调试

具体实施

声明下笔者的环境,Mac(10.14.6) CLion WebStorm(其他平台Node.js文档里也有介绍)

1. 下载Node.js源码 git clone https://github.com/nodejs/node.git‘

2. 根据BUILDING.md编译Debug的Node执行文件

  • cd node_project
  • ./configure --debug
  • make -j4

此时Node执行文件已经构建出来,out/Debug/node

注意点:编译Node.js源码比较耗资源,笔者的Mac呼呼作响,且需要足够的磁盘空间,笔者就遇到空间不足失败的情况,建议留有20G左右的空间;

空间不足,构建失败

Node.js编译产物截图:

Node.js构建产物截图

3. 配置IDE

这里看个人喜好,VSCode/Xcode/VS/Chrome/CLion/WebStorm都是可以用来调试了,而笔者是Jetbrains的铁粉,所以这里就用CLion/WebStorm来做演示,但要做到把原理说明白;

1. CLion调试C++

在*unix下,Node.js是用make来构建的,但是CLion是使用CMake来构建调试C++的,CLion可以根据代码目录自动生成CMakeLists.txt,以供调试;

在CLion里,用New CMake Project from Sources导入项目,会自动生成CMakeLists.txt;

CLion自动生成的CMakeLists.txt

这里在Edit Configurations,选择CMake Application

  • Target选择node_master
  • Executable选择我们刚编出来的Debug版Node
  • Program arguments填--inspect-brk ./demo.js,--inpect-brk是在应用代码的第一行断开;这里配置对应的命令行就是node --inspect-brk /User/run/project/node_source_learn/demo.js
  • 清空Before launch里的内容,因为我们的Node已经编译好了,不用再编译了;
CLion调试配置

2. WebStorm调试JS(官网介绍)

在WebStorm里,新建一个目录,新建demo.js,用来调试JS代码;

这里在Edit Configurations,选择Attach to Node.js/Chrome

  • Host填localhost
  • Port填9229,因为--inspect-brk默认监听9229端口,将Reconnect automatically打钩
WebStorm调试配置

4. 调试时,把CLion和WebStorm都启动调试

C++断点:

C++调试截图

JS断点:

JS调试截图

至此,Node.js的C++/JS混合阅读调试环境搭建完毕;

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • kotlin源码阅读——字符串

    filename:String.kt/StringsJVM.kt/Arrays.kt/CharSequence.kt

    Runhwguo
  • Kotlin源码阅读——system模块

    在kotlin的源码目录里,每个模块都有相应的md文件,做以说明。在kotlin最主要的stdlin/src目录下有一个Module.md:

    Runhwguo
  • kotlin源码阅读——函数式编程

    我主要写Kotlin源码阅读,函数式编程的基本概念,概念大家可以在网上做一些了解,这里推荐一下百度百科的定义,函数式编程概念,蛮清晰的。

    Runhwguo
  • 深度学习算法优化系列一 | ICLR 2017《Pruning Filters for Efficient ConvNets》

    这篇文章是深度学习算法优化系列的第一篇文章,主要解读一篇ICLR 2017年的《Pruning Filters for Efficient ConvNets》,...

    BBuf
  • python文件和目录操作方法大全

    一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.get...

    用户1214487
  • python文件和目录操作方法大全(含实例)

    一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。

    菲宇
  • 再谈文件读写:判断文件的几种方法及其优劣对比

    上周,猫猫写了一篇给Python学习者的文件读写指南,跟大家一起详尽地学习了文件读写的基础内容,以及with语句与上下文管理器的进阶知识。

    Python猫
  • python之文件操作、OS模块、CSV

    D closed 检查当前文件是否关闭,若为True ,则表示已关闭,若为False,则表示未关闭

    py3study
  • 获2019微信公开课教育先行者大奖,微信校园卡助力高校打造数字化示范校园

    ? “一年多以前,我们开始和腾讯微校达成了合作意向。2018年9月新生入学以后,腾讯微校的微信校园卡开始在整个校园内大面积使用。目前,学院大部分在校学生已注册...

    腾讯智慧教育
  • 超两万技术人员如何减少重复造轮子?腾讯推进内部开源协同

    ? 数万人的互联网公司如何高效运转,提升技术开发和运用效率? 截至2019年6月30日,腾讯(00700.HK)共有5.63万名员工。在去年9月30日的大规模...

    腾讯大讲堂

扫码关注云+社区

领取腾讯云代金券