原文地址:hiihl.com/articles/20… 本人近期在学习Node.js源码,并将会把学习过程、心得造成笔记。node
node.js是用C++写的,因此编译有如下步骤:webpack
首先是配置git
进入到node目录后,执行./configure --debug
,注意后面的--debug,一开始我没有加的试后发现断点进不去; 执行完之后会生成如下文件:github
|____cctest.target.mk
|____gyp-mac-tool
|____Makefile
|____mkssldef.target.mk
|____node.target.mk
|____node_dtrace_header.target.mk
|____node_dtrace_provider.target.mk
|____node_dtrace_ustack.target.mk
|____node_etw.target.mk
|____node_js2c.host.mk
|____node_perfctr.target.mk
|____specialize_node_d.target.mk
|____v8_inspector_compress_protocol_json.host.mk
复制代码
这些文件应该是make编译时须要的一些参数配置web
以后执行make编译,在这以前,我看到了Makefile中有这样一段注释(搜debug看到的)json
# BUILDTYPE=Debug builds both release and debug builds. If you want to compile # just the debug build, run `make -C out BUILDTYPE=Debug` instead. 复制代码
从这段注释理解,若是咱们运行make -C out BUILDTYPE=Debug
则不会编译release代码,因为咱们是本地学习使用,因此我使用 make -C out BUILDTYPE=Debug -j 4
编译,其中-j时编译使用的进程数,用于加快编译。 编译过程时间比较久,编译完之后能够看到多了一个out目录,out/Debug目录下有个可执行的文件node,这就是咱们本地编译出来的node啦。bash
第三步make install是安装时须要,此处能够忽略。markdown
打开IDE cLion,并导入本地的node项目,打开Run/Debug配置调试信息ide
参照上图配置:oop
ok,而后找到node_main.cc
,在main方法中打断点,debug运行
如图所示,咱们成功进入了断点。
若是,咱们想要同时调试js代码及node.js源码,该如何配置呢? 回想咱们使用webpack debug代码时控制台上会打印node --inspect-brk=49469 /xxx.js
,node版本<8时打印--debug --debug-brk=49469
, 其中这49469就是node.js的调试窗口,因此咱们在调试node.js源码时,Program arguments能够这样配置--inspect-brk=49469 ./test.js
, 而后再启动一个Node.js Remote Debug (webStorm中)或 Attach to Node.js/Chrome (cLion中)
,端口号配置为49469,便可同时调试js