NodeJS C++插件开发(三) - 调试概述


如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033

文章目录

  • NodeJS C++插件开发(三) - 调试概述
    • 前言
    • 1. Visual Studio Code
      • 1.1 windows msvc(Visual Studio)
      • 1.2 linux gcc/g++
    • 2. Visual Studio
    • 3. gdb
      • 3.1 本地gdb调试
      • 3.2 远程gdb调试
    • 4. QT

相关阅读:
NodeJS C++插件开发(一) - 简介
NodeJS C++插件开发(二) - 示例代码hello world

前言

前面文章介绍了如何编写、编译和运行NodeJS C++插件。在NodeJS C++插件开发过程中,调试源码肯定是必不可少的。本文将简要介绍几种NodeJS C++插件的调试方法,主要包括Visual Studio Code、Visual Studio、gdb、QT。

1. Visual Studio Code

1.1 windows msvc(Visual Studio)

Visual Studio Code中

【Run(Ctrl + Shift + D)】-> 【create a launch.json file】-> 【C++ (Windows)】

配置launch.json启动文件

{"version": "0.2.0","configurations": [{"name": "(Windows) 启动","type": "cppvsdbg","request": "launch","program": "C:/Program Files/nodejs/node.exe","args": ["${workspaceFolder}/index.js"],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"console": "externalTerminal"}]
}

注意:只有带有调试信息的NodeJS C++插件才能进行源码调试。

1.2 linux gcc/g++

Visual Studio Code中

【Run(Ctrl + Shift + D)】-> 【create a launch.json file】-> 【C++ (GDB/LLDB)】

配置launch.json启动文件

{"version": "0.2.0","configurations": [{"name": "g++ - 生成和调试活动文件","type": "cppdbg","request": "launch","program": "/usr/local/bin/node","args": ["${workspaceFolder}/index.js"],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true}],"miDebuggerPath": "/usr/bin/gdb"}]
}

注意:只有带有调试信息的NodeJS C++插件才能进行源码调试。

2. Visual Studio

使用Visual Studio加载CMakeLists.txt工程(这里只介绍cmake-js方式)。

  • 生成Visual Studio工程
$ cmake-js configure
  • 使用Visual Studio运行addon.sln
    编译NodeJS C++插件
【生成】-【生成解决方案】
  • 设置运行命令
右键修改addon工程【属性】
【调试】 -> 【命令】: C:/Program Files/nodejs/node.exe
【调试】 -> 【命令参数】$(projectDir)/../index.js

注意:只有带有调试信息的NodeJS C++插件才能进行源码调试。

3. gdb

3.1 本地gdb调试

  • 编译出debug版本的程序
$ node-gyp configure build --debug

注意:只有带有调试信息的NodeJS C++插件才能进行源码调试。

  • 进行gdb调试
$ gdb node
GNU gdb (Ubuntu 9.1-0ubuntu1) 9.1
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:<http://www.gnu.org/software/gdb/documentation/>.For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from node...
(gdb) run index.js
Starting program: /usr/local/bin/node index.js
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff7a20700 (LWP 72217)]
[New Thread 0x7ffff721f700 (LWP 72218)]
[New Thread 0x7ffff6a1e700 (LWP 72219)]
[New Thread 0x7ffff621d700 (LWP 72220)]
[New Thread 0x7ffff5a1c700 (LWP 72221)]
[New Thread 0x7ffff7fc8700 (LWP 72222)]
hello world
[Thread 0x7ffff5a1c700 (LWP 72221) exited]
[Thread 0x7ffff621d700 (LWP 72220) exited]
[Thread 0x7ffff6a1e700 (LWP 72219) exited]
[Thread 0x7ffff721f700 (LWP 72218) exited]
[Thread 0x7ffff7a20700 (LWP 72217) exited]
[Thread 0x7ffff7fc8700 (LWP 72222) exited]
[Inferior 1 (process 72213) exited normally]
(gdb) list
1   #include <node_api.h>
2
3   napi_value helloMethod(napi_env env, napi_callback_info info)
4   {
5       napi_value result;
6
7       napi_create_string_utf8(env, "hello world", NAPI_AUTO_LENGTH, &result);
8
9       return result;
10  }
(gdb) break 7
Breakpoint 1 at 0x7ffff7fbc19c: file /home/dev/git/node-webdev/code/2.cppAddon/1.cpp_addon_hello_world/3.hello_world_napi_base/addon.cpp, line 7.
(gdb) run
Starting program: /usr/local/bin/node index.js
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff7a20700 (LWP 72224)]
[New Thread 0x7ffff721f700 (LWP 72225)]
[New Thread 0x7ffff6a1e700 (LWP 72226)]
[New Thread 0x7ffff621d700 (LWP 72227)]
[New Thread 0x7ffff5a1c700 (LWP 72228)]
[New Thread 0x7ffff7fc8700 (LWP 72229)]Thread 1 "node" hit Breakpoint 1, helloMethod (env=0x45f23a0, info=0x7fffffffcd80)at /home/dev/git/node-webdev/code/2.cppAddon/1.cpp_addon_hello_world/3.hello_world_napi_base/addon.cpp:7
7       napi_create_string_utf8(env, "hello world", NAPI_AUTO_LENGTH, &result);
(gdb) print env
$1 = (napi_env) 0x45f23a0
(gdb) continue
Continuing.
hello world
[Thread 0x7ffff5a1c700 (LWP 72228) exited]
[Thread 0x7ffff621d700 (LWP 72227) exited]
[Thread 0x7ffff6a1e700 (LWP 72226) exited]
[Thread 0x7ffff721f700 (LWP 72225) exited]
[Thread 0x7ffff7a20700 (LWP 72224) exited]
[Thread 0x7ffff7fc8700 (LWP 72229) exited]
[Inferior 1 (process 72223) exited normally]
(gdb) quit

注意:gdb -tui node可用ui调试

3.2 远程gdb调试

使用gdb + gdbserver的方式可以进行远程调试。该方式不受限与CPU和操作系统,只要在远端安装gdbserver,在本机安装配套的gdb调试器即可进行调试。

例如Visual Studio 2019中支持的【C++的linux开发】,底层也是使用该原理。

【由于篇幅优先,此处不做详述,会有专门系列介绍远程gdb调试】

4. QT

使用QT Creator加载CMakeLists.txt工程(这里只介绍cmake-js方式)。

  • 设置构建目录
【Project】-> 【build】-> 【Build directory】-> 【<project folder>/build】

其中,也就是CMakeLists.txt所在的%{sourceDir},build也就是node默认的编译路径。

  • 设置自定义编译命令
【Project】-> 【build】->【Add Build Step】-> 【Custom Process Step】:
Command: cmake-js
Arguments: rebuild -D
Working directory: %{sourceDir}
  • 设置自定义清除命令
【Project】-> 【build】->【Add Clean Step】-> 【Custom Process Step】:
Command: cmake-js
Arguments: clean
Working directory: %{sourceDir}
  • 设置自定义运行命令
【Project】-> 【Run】->【Add】->【Custom Executable】Executable: /usr/local/bin/node
Arguments: %{sourceDir}/index.js
Working directory: %{sourceDir}

按F5进行调试


License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎


Reference:

  1. https://gitee.com/itas109/node-webdev/tree/main/code/2.cppAddon

NodeJS C++插件开发(三) - 调试概述相关推荐

  1. sonarqube插件开发(三) 调试插件

    环境 windows + eclipse +sonarqube server 5.6.4 准备 新建一个maven项目,其中加入了一些插件所用的jar <project xmlns=" ...

  2. 教程:Nodejs大漠插件开发游戏脚本实战(二)搭建项目

    一.使用nvm-windows安装Nodejs 上一篇文章我们说过我们需要用到32位的Nodejs,而且因为一些特殊原因,我们要用到指定的版本.为了不影响我们其他项目的开发,这里用到一个Nodejs的 ...

  3. Chrome插件-浏览器插件开发-插件安装-插件调试-概述

    文章目录 1.简述 2.弹出界面 3.背景界面 4.插件安装 5.调试 6.打包 7.作者答疑   现今浏览器可以实现大部分数据信息的展示,提供给读者进行浏览,开发浏览器插件,可以有效实现对获取的数据 ...

  4. 三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》

    案例需求:在销售订单上新增一个按钮,在订单明细中新增一个字段,命名[即时库存]. 点击按钮,弹出"Hello World!",并获取订单明细物料的即时库存,填入字段[即时库存]. ...

  5. kettle转换和作业插件开发及调试

    这是一篇几年前写下的文档,最近打算根据这篇文档重写一下kettle插件的教程.结果各种理由,一推再推.今天索性将这篇文档发布出来,分享给大家,例子等有空再补上.这是一篇基于kettle3.2基础上完成 ...

  6. 210129阶段三调试、进程间通信-共享内存

    目录 一.学习的知识点 1 回顾 1.1 回顾 调试 2 共享内存 2.1 函数 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 一.学习的知识点 1 回顾 1.1 回顾 消息队列可以接收指定 ...

  7. NodeJs两个简单调试技巧

    today, 我们的话题作文是nodejs,我尝试对它的描述是:似曾相似,但它又不一样的存在着.百花齐放的it世界里,以独特身姿绽放的美丽更容易吸引人.也许只是不了解,也许时间会给出答案,nodejs ...

  8. 如何启用nodejs request模块的调试模式

    nodejs里的request module是一个进行HTTP通讯非常好用的库,最近查看它的源代码,发现一个有用的调试模式. 第134行, 把nodejs当前的环境变量NODE_DEBUG的值写入Re ...

  9. nodejs里require的调试截屏

    例子:我执行到了下图第二行: const TCPClient = require('-/modules/tcpClient/index') 那么我们就进入require的内部进行调试: 进入第11行: ...

最新文章

  1. linux shell mkpasswd 生成随机密码
  2. 面试题 08.03. Magic Index LCCI 魔术索引
  3. 测试技巧–不编写测试
  4. 清理offset_关于 kafka 日志清理策略的问题
  5. 云服务如何对外开发指定端口
  6. HTML - 文本及其格式化
  7. Andoid Activity.getWindowManager().getDefaultDisplay().getWidth()已被废弃
  8. DHCP协议++ClientServer架构
  9. webpack vs gulp 一张图说明
  10. 不用+、-、×、÷数字运算符做加法
  11. 4-MSP430定时器_定时器中断
  12. 西南科技大学OJ题 进制转换问题0961
  13. 使用VirtualBox安装Dos系统并配置masm汇编语言环境
  14. 工业无线通信网络步入LTE 时代
  15. 多元逻辑回归 - 小技巧(一)
  16. 路由交换技术-交换机vlan,trunk,access等配置,保证其连通性,telnet远程登陆配置,osf协议配置,默认路由。
  17. JavaWeb--使用Websocket实现在线聊天功能
  18. Excel 2010 VBA 入门 040 批量删除空行
  19. 苏嵌学习日志12 07.20
  20. double变量可以用%f输出

热门文章

  1. 计算机显示图形原理,计算机图形学:图形的计算与显示原理
  2. Ubuntu Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答
  3. 系统思考:智猪博弈(结构影响行为)
  4. ubuntu根目录扩容
  5. 判断其他应用正在使用录音机——AudioManager
  6. 亚马逊 外国电商的中国之行
  7. 虎牙泛游戏直播布局获认可 IPO 40天市值暴涨300%
  8. 注册表恢复被篡改的默认浏览器
  9. ObjectARX学习笔记【2】-AutoCAD2013+ObjectArx2013+VS2010第一个程序HelloWorld
  10. 物联网系统开发的11个步骤【看评论区里领取项目资料】