Node.js原始碼學習(1) 使用cLion除錯node.js原始碼

hihl發表於2018-01-16

原文地址:hiihl.com/articles/20… 本人近期在學習Node.js原始碼,並將會把學習過程、心得形成筆記。

環境準備

  • 作業系統: macOS
  • IDE: cLion
  • 原始碼路徑: Node Master

本地編譯

node.js是用C++寫的,所以編譯有以下步驟:

  • ./configure 配置。軟體裝到哪裡、什麼引數、什麼os、裝什麼東西,全都是configure來確定的
  • make 編譯。make會讀取makefile的配置,進行編譯,生成可執行檔案
  • make install 安裝。make install 會根據設定好的路徑,把軟體安裝到系統中

首先是配置

進入到node目錄後,執行./configure --debug,注意後面的--debug,一開始我沒有加的試後發現斷點進不去; 執行完以後會生成以下檔案:

|____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編譯時需要的一些引數配置

之後執行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.
複製程式碼

從這段註釋理解,如果我們執行make -C out BUILDTYPE=Debug則不會編譯release程式碼,由於我們是本地學習使用,所以我使用 make -C out BUILDTYPE=Debug -j 4編譯,其中-j時編譯使用的程式數,用於加快編譯。 編譯過程時間比較久,編譯完以後可以看到多了一個out目錄,out/Debug目錄下有個可執行的檔案node,這就是我們本地編譯出來的node啦。

第三步make install是安裝時需要,此處可以忽略。

匯入工程

開啟IDE cLion,並匯入本地的node專案,開啟Run/Debug配置除錯資訊

Node.js原始碼學習(1) 使用cLion除錯node.js原始碼

參照上圖配置:

  • 選擇Executable為前面編譯出來的out/Debug/node;
  • Before launch中有一個build,我們要把它刪掉,否則每次都會重新編譯;
  • Work directory選擇要執行的js程式碼目錄;
  • Program arguments即為要執行的js程式碼。

ok,然後找到node_main.cc,在main方法中打斷點,debug執行

Node.js原始碼學習(1) 使用cLion除錯node.js原始碼

如圖所示,我們成功進入了斷點。

同時除錯js及node原始碼

如果,我們想要同時除錯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

相關文章