前言
此篇是通过windows宿主机,在VScode下调试nodejs的扩展应用
安装DcokerToolbox,通过前一篇文章设置好调试docker内的nodejs的javascript,不清楚的请跳转到前一篇文章
1:创建nodejs的C++扩展应用
在原先的server.js的文件夹下创建hello.cpp,为了区分前一篇内容的显示结果,修改显示的内容为hello world in cpp,添加内容如下
#include <node.h>
#include <v8.h>
using namespace v8;
void Method(const v8::FunctionCallbackInfo<Value>& args)
{
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "hello world in cpp"));
}
void Init(Handle<Object> exports)
{
Isolate* isolate = Isolate::GetCurrent();
exports->Set(String::NewFromUtf8(isolate, "hello"),
FunctionTemplate::New(isolate, Method)->GetFunction());
}
NODE_MODULE(hello, Init)
2:创建nodejs的C++扩展应用的编译脚本
创建binding.gyp(名字不可以修改),内容如下:
{
'targets': [
{
'target_name': 'hello',
'sources': ['hello.cpp']
}
]
}
3:编译该nodejs的c++扩展应用
需要安装node-gyp,通过npm install node-gyp等待安装完成
编译debug版本的.node文件,命令如下:node-gyp configure --debug build ( 如果想编译release版本,则不需要后面参数,直接使用node-gyp即可)
编译好后的修改server.js的引用
4:修改server.js文件
添加对nodejs的c++扩展应用的调用,修改后内容如下:
var express = require('express');
var app = express();
var addon=require('./build/Debug/hello.node')
app.get('/', function (req, res) {
res.send(addon.hello());
});
app.listen(8080, function () {
console.log('app is listening at port 8080');
});
5:启动server.js
6:附加到容器,并打开对应目录
7:修改launch.json文件
添加后内容如下:
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Node: Nodemon",
"processId": "${command:PickProcess}",
"restart": false,
"protocol": "inspector",
},
{
"name": "Attach Nodejs C++ gdb",//名称随便取
"type": "cppdbg", //类型为cppdbg,linux都是这个类型
"request": "attach", //方式为附加到进程
"program": "/usr/bin/node", //此处填写容器内的node的路径
"processId":"${command:pickProcess}", //照例填写选择进程
"MIMode": "gdb", //说明使用gdb调试
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
8:安装VScode扩展插件
搜索cpptools,将该插件安装到宿主机和容器中,安装到宿主机,是用于本机调试,安装到容器是可以附加到容器的C++调试
安装成功后显示如下:
9:安装好后进入容器的cpptools目录下检查是否拥有运行权限
进入到对应的cpptools的扩展插件的目录下:
cd /root/.vscode-server/extensions/ms-vscode.cpptools-0.28.0
查看当前下文件权限无执行权限
则批量添加运行权限,为了方便起见,我直接设置的755权限:chmod -R 755 .
10:以上都设置好后,则进入vscode进行附加到进程调试c++源代码
出现如下内容,表明已经附加到进程,并且可以设置cpp的断点,且已经有运行的控制台打印了,下一步,浏览器输入IP和端口,看断点是否生效吧。