共计 1527 个字符,预计需要花费 4 分钟才能阅读完成。
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 部分中增加两个任务,如下:
执行 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))
项目地址:https://github.com/warjiang/d…