原文地址:http://hiihl.com/articles/2018/1/15/learnnode1.md
本人近期在學(xué)習(xí)Node.js源碼,并將會把學(xué)習(xí)過程、心得形成筆記香府。
環(huán)境準(zhǔn)備
- 操作系統(tǒng): macOS
- IDE: cLion
- 源碼路徑: Node Master
本地編譯
node.js是用C++寫的平斩,所以編譯有以下步驟:
- ./configure 配置。軟件裝到哪里瞭稼、什么參數(shù)忽洛、什么os、裝什么東西环肘,全都是configure來確定的
- make 編譯欲虚。make會讀取makefile的配置,進(jìn)行編譯悔雹,生成可執(zhí)行文件
- make install 安裝复哆。make install 會根據(jù)設(shè)定好的路徑欣喧,把軟件安裝到系統(tǒng)中
首先是配置
進(jìn)入到node目錄后,執(zhí)行./configure --debug
梯找,注意后面的--debug续誉,一開始我沒有加的試后發(fā)現(xiàn)斷點(diǎn)進(jìn)不去;
執(zhí)行完以后會生成以下文件:
|____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
這些文件應(yīng)該是make編譯時需要的一些參數(shù)配置
之后執(zhí)行make編譯初肉,在這之前酷鸦,我看到了Makefile中有這樣一段注釋(搜debug看到的)
# BUILDTYPE=Debug builds both release and debug builds. If you want to compile
# just the debug build, run `make -C out BUILDTYPE=Debug` instead.
從這段注釋理解,如果我們運(yùn)行make -C out BUILDTYPE=Debug
則不會編譯release代碼牙咏,由于我們是本地學(xué)習(xí)使用臼隔,所以我使用
make -C out BUILDTYPE=Debug -j 4
編譯,其中-j時編譯使用的進(jìn)程數(shù)妄壶,用于加快編譯摔握。
編譯過程時間比較久,編譯完以后可以看到多了一個out目錄丁寄,out/Debug目錄下有個可執(zhí)行的文件node氨淌,這就是我們本地編譯出來的node啦。
第三步make install是安裝時需要伊磺,此處可以忽略盛正。
導(dǎo)入工程
打開IDE cLion,并導(dǎo)入本地的node項(xiàng)目屑埋,打開Run/Debug配置調(diào)試信息
參照上圖配置:
- 選擇Executable為前面編譯出來的out/Debug/node;
- Before launch中有一個build豪筝,我們要把它刪掉,否則每次都會重新編譯;
- Work directory選擇要運(yùn)行的js代碼目錄;
- Program arguments即為要運(yùn)行的js代碼摘能。
ok续崖,然后找到node_main.cc
,在main方法中打斷點(diǎn)团搞,debug運(yùn)行
如圖所示严望,我們成功進(jìn)入了斷點(diǎn)。
同時調(diào)試js及node源碼
如果逻恐,我們想要同時調(diào)試js代碼及node.js源碼像吻,該如何配置呢?
回想我們使用webpack debug代碼時控制臺上會打印node --inspect-brk=49469 /xxx.js
梢莽,node版本<8時打印--debug --debug-brk=49469
萧豆,
其中這49469就是node.js的調(diào)試窗口,所以我們在調(diào)試node.js源碼時昏名,Program arguments可以這樣配置--inspect-brk=49469 ./test.js
涮雷,
然后再啟動一個Node.js Remote Debug (webStorm中)或 Attach to Node.js/Chrome (cLion中)
,端口號配置為49469轻局,即可同時調(diào)試js