debugging 如何在Raspberry Pi上使用VS代码调试Node-Red节点?

nhhxz33t  于 2023-03-03  发布在  其他
关注(0)|答案(2)|浏览(505)

我正在为i2c设备开发一个Node-Red节点,但无法调试代码,因为它不会在断点处停止。
Node-Red(2.1.3)+ Visual Studio代码(v1.61.1)都安装在同一个树莓派操作系统(32位)上。
我不想调试整个NR系统,也不想调试node.js,只想调试我在VSCode中工作的那个节点(.js文件),并在VSCode中看到错误。(不在浏览器的调试器中)
我尝试了很多方法来调整launch.json + package.json,在.js文件中添加debugging行,等等。
我发现了两个配置,它们可以毫无错误地启动Node-red,但在运行过程中它永远不会停止。

软件包. json:

"scripts": {
    "inspect": "node --inspect /usr/lib/node_modules/node-red/red.js --userDir /home/pi/.node-red/node_modules/mcp-pfc-aio",
    "start": "node node_modules/node-red/red.js -v -u . -s settings.js",
    "debug": "node --nolazy --inspect-brk=9229 node_modules/node-red/red.js -v -u . -s settings.js"
  },

启动.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "name": "Run Script: debug MCP3",
            "program": "/usr/lib/node_modules/node-red/red.js",
            "mode": "debug",
            "cwd": "/home/pi/.node-red/",
            "skipFiles": [
                "<node_internals>/**"
            ],
            //"runtimeExecutable": "npm",
            "runtimeArgs": ["--preserve-symlinks", "--experimental-modules"],
            "request": "launch"
            //"command": "npm run debug",
        },
        {
            "type": "node",
            "request": "launch",
            "mode": "debug",
            "name": "Launch via NPM",
            "runtimeExecutable": "npm",
            "runtimeArgs": [
                "--preserve-symlinks", "--experimental-modules",
                "run-script",
                "inspect"
            ],
            "program": "/usr/lib/node_modules/node-red/red.js",
            "stopOnEntry": true,
//            "cwd": "/home/pi/.node-red/",
//            "cwd": "${workspaceRoot}",
            "port": 9229,
            "skipFiles": [
              "<node_internals>/**"
            ]
          }        
    ]
}
mf98qq94

mf98qq941#

我通常不使用视觉代码,但我想我已经得到了这个工作。

  • 我假设您使用的是全局安装的Node-RED
  • 我在远程pi上有一个目录,其中包含我正在开发的节点/home/pi/test
  • /home/pi/.node-red中,我运行npm install /home/pi/test来安装节点(这将把dev目录符号链接到node_modules目录)。
  • 运行以下命令以查找Node-RED入口点的位置:
$ readlink -f $(which node-red)
/usr/lib/node_modules/node-red/red.js

然后,在下一步中使用该值

  • node-red条目添加到节点的package.json文件的脚本部分:
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "node-red": "node /usr/lib/node_modules/node-red/red.js"
  },
  "keywords": [
    "node-red"
  ],
  "node-red": {
    "nodes": {
      "test": "test.js"
    }
  },
  "author": "ben@example.com",
  "license": "Apache-2.0"
}
  • 在节点的js文件中需要断点的位置设置断点,例如test.js
  • 使用“调试脚本”从package.json启动node-red脚本
f0ofjuux

f0ofjuux2#

我有以下设置:

  • 远程服务器上的红色节点(基于Linux)
  • 安装VSCode的本地开发计算机。

1.为VSCode安装远程SSH扩展
1.为在远程计算机上运行node-red进程的用户设置SSH连接。我更喜欢基于密钥的身份验证,但这并不重要
1.从VSCode检查连接(F1-〉调试:远程SSH:连接到主机...)

1.这个扩展很聪明,读取ssh配置文件。例如,我的~/.ssh/config文件包含以下行:

$ cat ~/.ssh/config 
...
Host hctr-s0-laci
Hostname 192.168.1.2
Port 1234
User la
IdentityFile ~/.ssh/X_ed25519

Host hctr-s0-node-red
Hostname 192.168.1.3
Port 1234
User node-red
IdentityFile ~/.ssh/X_ed25519
...

我的VSCode列出了以下

你可以看到,我的远程服务器上有一个node-red用户,这个用户运行node-red服务。
1.您可以连接到节点进程(F1-〉Debug:attach to node process),并选择红色节点用户


正在运行的进程
在功能节点中插入debugger关键字,VSCode将停止,您可以自由调试。

  • 注意:首次连接后,VSCode将在远程计算机上安装调试服务器。我需要一段时间。*

相关问题