通过VScode调试docker内的nodejs的C++扩展应用

前言   

    此篇是通过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和端口,看断点是否生效吧。

11:浏览器输入IP和端口,查看断点是否生效

12:以上设置均正确的情况下,会正常断下,并可以单步执行你自己的代码了,EnjoyIt!~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容