vscode調試node.js c++擴展

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-gyp來調用對應的工具來編譯項目,想要生成調試符號信息也應該從node-gyp的文檔入手,從node-gyp的command options部分可以看到node-gyp支持--debug選項。我們可以通過node-gyp rebuild --debug來生成帶有調試信息的node擴展,如果不加--debug表示生成的是一個release擴展。我們在原來項目的package.json文件的scripts部分中增加兩個任務,如下:
clipboard.png

執行npm run rebuild會生成一個build/Release目錄。執行npm run rebuild:dev會生成一個build/Debug目錄。

配置vscode

vscode安裝lldb插件

這裏我們將用lldb來調試node擴展。這裏我們需要在vscode中安裝lldb擴展。安裝的過程參考vscode-lldb ,這裏不再贅述。

配置vscode task

Cmd+Shift+P 輸入configure task配置一個任務,該任務會執行npm run rebuild:dev,生成帶調試信息的node擴展文件。筆者的配置如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "npm",
            "script": "rebuild:dev",
            "problemMatcher": []
        }
    ]
}

配置vscode 調試

點擊debug按鈕之後,下面在launch.json中配置調試node擴展的任務,注意在配置的時候增加一個preLaunchTask任務,該任務就是我們上一步配置的。最終luanch.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擴展

這裏爲了調試node擴展,我們寫了一個demo用於引用Debug版本的node擴展,如下:

const addon = require('../build/Debug/sum')
console.log(addon.sum(1,2))

clipboard.png

項目地址:https://github.com/warjiang/d...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章