Debugging NodeJS C++ addons using VS Code
以前筆者寫了一篇 用NAN寫一個nodejs的c++擴展, 實際開發過程當中,確定是有單步調試的需求。這裏簡單介紹用如何用vscode調試node.js c++擴展。通常要調試某個程序,爲了能清晰地看到調試的每一行代碼、調用的堆棧信息、變量名和函數名等信息,須要待調試程序地 調試符號 信息。好比咱們在使用GCC編譯程序的時候,若是加上 -g 選項便可在編譯後的程序中保留全部的調試符號信息。假如咱們有一個hello_world.c的源文件,咱們能夠經過gcc -g -o hello_world hello_world.c
生成一個帶調試信息的hello_world程序。相似的,若是咱們想要調試node.js擴展,咱們也須要擴展源文件的調試符號信息。node
以前咱們經過node-gyp來調用對應的工具來編譯項目,想要生成調試符號信息也應該從node-gyp
的文檔入手,從node-gyp的command options部分能夠看到node-gyp支持--debug選項。咱們能夠經過node-gyp rebuild --debug
來生成帶有調試信息的node擴展,若是不加--debug
表示生成的是一個release擴展。咱們在原來項目的package.json
文件的scripts
部分中增長兩個任務,以下:c++
執行npm run rebuild
會生成一個build/Release
目錄。執行npm run rebuild:dev
會生成一個build/Debug
目錄。git
這裏咱們將用lldb
來調試node擴展。這裏咱們須要在vscode中安裝lldb
擴展。安裝的過程參考vscode-lldb ,這裏再也不贅述。github
Cmd+Shift+P
輸入configure task配置一個任務,該任務會執行npm run rebuild:dev
,生成帶調試信息的node擴展文件。筆者的配置以下:npm
{ "version": "2.0.0", "tasks": [ { "type": "npm", "script": "rebuild:dev", "problemMatcher": [] } ] }
點擊debug按鈕以後,下面在launch.json
中配置調試node擴展的任務,注意在配置的時候增長一個preLaunchTask
任務,該任務就是咱們上一步配置的。最終luanch.json配置以下:json
{ "version": "0.2.0", "configurations": [{ "type": "lldb", "request": "launch", "name": "Launch Program", "preLaunchTask": "npm: build:dev", "program": "/absolute/path/to/node", "args": [ "/absolute/path/to/your/index.js" ] }] }
從launch.json
能夠看到整個調試的過程爲:vscode插件調用lldb,啓動nodejs去執行/absolute/path/to/your/index.js
,在js文件中會調用node擴展,而該部分擴展已經包含了調試信息,故而能夠用於調試。函數
這裏爲了調試node擴展,咱們寫了一個demo用於引用Debug版本的node擴展,以下:工具
const addon = require('../build/Debug/sum') console.log(addon.sum(1,2))