使用 vscode 调试 nodejs 代码

devtools/2024/11/24 3:55:22/

继前一篇:使用 cmake.js 在 Windows 上编译 js 代码

我们已经能在 vscode 上成功的编译出 js 代码,那我们该如何断点调试 js 代码以及 js 引用的 C 库源码呢

首先要先以 Debug 模式编译 js 代码

cmake-js clean
cmake-js compile -D

找到 debug 生成的 pdb 文件,这个很重要,关乎到能否 debug 到 C 库源码

注:pdb 文件一般在 cmakejs/build/Debug 文件夹下

在 .vscode 下修改 launch.json 文件,如果没有的话,就新建一个

settings.json 不用特别设置,在 launch 的时候,编译器会自动添加相关文件

进入 .json 文件中修改相关配置,主要是 js 源文件和 pdb 文件的路径

{"version": "0.2.0","configurations": [{"name": "JS Debug Build","type": "node","request": "launch","program": "./projects/ohos/cmakejs/project.js","args": [],"console": "integratedTerminal"},{"name": "Windows Attach","type": "cppvsdbg","request": "attach","processId": "${command:pickProcess}"},{"name": "C/C++ Runner: Debug Session","type": "cppdbg","request": "launch","args": [],"stopAtEntry": false,"externalConsole": true,"cwd": "./src","program": "./projects/ohos/cmakejs/build/Debug/project.pdb","MIMode": "cppvsdbg","miDebuggerPath": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]}

注意:.vscode 一般是在项目的子层级下,如果 cmake.js 编译的鸿蒙项目在更深的层级下,就需要先 cd 到鸿蒙项目的层级下,编译好 pdb 文件,再 cd 到最外面项目的层级下,最后进行调试 

好了,下面开始断点调试

在 project.js 代码里打上断点,如果需要查看 js 引用的 napi 代码(js 与 C 库是通过 napi 交互,此处默认为 napi 代码),则在 napi 代码里打上断点

在 RUN AND DEBUG 下拉框里选择 JS Debug Build。选择完后,点左边绿色的调试按钮(三角形),项目会运行并停在 js 代码的断点处

然后继续选择 Windows Attach,并点左边绿色的调试按钮

会跳出 Attach to Process 框,输入 node.exe,并选择 nodejs 目录下 node.exe 路径

确认 Windows Attach 已经运行

点击 Step Over 或者 F10,编译器就会跳到 napi 代码里的断点处

在 napi 代码里就可以继续调试,甚至可以查看 napi 引用的 C 库源码


http://www.ppmy.cn/devtools/136447.html

相关文章

OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:分享|16个含源码和数据集的计算机视觉实战项目 本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括: 1. 人…

杰发科技AC7801——ADC定时器触发的简单使用

使用场景 在需要多次采样结果的情况下,比如1s需要10w次的采样结果,可以考虑使用定时器触发采样,定时器设置多少的时间就会多久采样转换一次。 再加上使用dma,采样的结果直接放在dma的数组里面。 实现了自动采样,自动…

移动语义和拷贝语义的区别以及智能指针

移动语义和拷贝语义的区别 一、概念本质: 拷贝语义 拷贝语义是基于对象的复制操作。当一个对象被拷贝时,会创建一个新的对象,这个新对象的内容是原始对象的完全副本,这意味着新对象和原始对象在内存中有独立的存储空间,并且它们…

DICOM图像知识:解析如何在DICOM图像中实现多层覆盖层的显示的方法

目录 1. 覆盖层(Overlay)基础 1.1 覆盖层的定义 1.2 DICOM中的覆盖层表示 2. 解析和处理思路 2.1 提取覆盖层数据 2.2 将覆盖层叠加到图像上 3. 实现示例 4. 注意事项 1. 覆盖层(Overlay)基础 1.1 覆盖层的定义 覆盖层是…

【LeetCode热题100】栈

这道题一共记录了关于栈的5道题目:删除字符串中所有相邻重复项、比较含退格的字符串、基本计算器II、字符串解码、验证栈序列。 class Solution { public:string removeDuplicates(string s) {string ret;for(auto c : s){if(ret.size() 0 || c ! ret.back()) ret …

easyExcel - 导出合并单元格

目录 前言一、情景介绍二、问题分析三、代码实现四、测试代码 前言 Java-easyExcel入门教程:https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如何使用 easyExcel,以及写了两个入门的 demo ,这两个 demo 能应付在开发…

数据结构-7.Java. 对象的比较

本篇博客给大家带来的是java对象的比较的知识点, 其中包括 用户自定义类型比较, PriorityQueue的比较方式, 三种比较方法...... 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 .…

IntelliJ IDEA常用快捷键

文章目录 环境快捷键外观编辑移动光标提示查找Live Templates列操作调试运行 环境 Ubuntu 24.04.1IntelliJ IDEA 2024.1.6 快捷键 外观 Alt 1:打开/关闭“项目”窗口(即左边的导航窗口) Alt 4:打开/关闭“运行”窗口 Alt …