[eggjs/egg]vscode本地debug远程,出现错误,期望获取正确的debug方式

2024-07-22 831 views
6
What happens?

根据eggjs vscode插件设置远程debug,但是报错如下,我确认ip和端口是正确的

复现步骤,错误日志以及相关配置

launch.json如下

{
    "type": "node",
    "request": "attach",
    "name": "Egg Attach to remote",
    "localRoot": "${workspaceRoot}",
    // "remoteRoot": "/usr/src/app",
    "remoteRoot": "/home/xxx/project",
    "address": "xxx.xxx.xxx.xxx",
    "protocol": "auto",
    "port": 9999
}
vscode错误如下

Error processing attach: Error: Could not connect to debug target at http://xxx.xxx.xxx.xxx:9999: Promise was canceled at Object.retryGetNodeEndpoint (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/ms-vscode.js-debug/src/extension.js:1:123640) at runMicrotasks () at processTicksAndRejections (internal/process/task_queues.js:93:5) at runNextTicks (internal/process/task_queues.js:62:3) at listOnTimeout (internal/timers.js:523:9) at processTimers (internal/timers.js:497:7) at t (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/ms-vscode.js-debug/src/extension.js:59:46048) at C.launch (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/ms-vscode.js-debug/src/extension.js:1:145270) at t.Binder.captureLaunch (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/ms-vscode.js-debug/src/extension.js:59:181643) at t.Binder._launch (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/ms-vscode.js-debug/src/extension.js:59:181194) at async Promise.all (index 5) at t.Binder._boot (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/ms-vscode.js-debug/src/extension.js:59:180254) at t.default._onMessage (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/ms-vscode.js-debug/src/extension.js:1:92546)

相关环境信息
  • 操作系统 m1 Big Sur 11.2.3 (20D91)

  • Node 版本: node 12 lts

  • Egg 版本: package.json

    "dependencies": {
    "@types/jsonwebtoken": "^8.3.7",
    "@types/mocha": "^2.2.40",
    "@types/node": "^7.0.12",
    "@types/semver": "^7.1.0",
    "@types/supertest": "^2.0.0",
    "autod": "^3.0.1",
    "autod-egg": "^1.1.0",
    "axios": "^0.19.2",
    "egg": "^2.6.1",
    "egg-alinode": "^2.0.1",
    "egg-bin": "^4.11.0",
    "egg-ci": "^1.8.0",
    "egg-cors": "^2.2.3",
    "egg-mock": "^3.16.0",
    "egg-redis": "^2.4.0",
    "egg-router-plus": "^1.3.1",
    "egg-scripts": "^2.6.0",
    "egg-sequelize": "^5.2.1",
    "egg-ts-helper": "^1.25.6",
    "egg-validate": "^2.0.2",
    "eslint": "^6.7.2",
    "eslint-config-egg": "^8.0.0",
    "factory-girl": "^5.0.4",
    "jsonwebtoken": "^8.5.1",
    "mysql2": "^2.1.0",
    "semver": "^7.1.3",
    "sequelize-cli": "^5.5.1",
    "tslib": "^1.9.0",
    "typescript": "^3.0.0",
    "uuid": "^7.0.2"
    }

回答

9

可以试下 --inspect=0.0.0.0:9229

Node 默认的 inspect 好像只有 127 的地址,需要启动参数自己指定下。

egg-bin 只是默认传递了参数,没做其他事了。

具体的看下 Node 相关调试文档, https://nodejs.org/dist/latest-v14.x/docs/api/debugger.html

0

看看你的远端机器的防火墙,是不是禁掉了你的 debug 端口

6

你这个是本地debug吧? 我这里是想本地代码debug 生产环境的(远程机器,ip),

8

我这里的ip和端口填的是远程node服务的,生产环境应该不会自动启动debug端口吧?意思是要生产环境起个debug端口吗?

8

你想 debug 生产环境,那你生产环境的 nodejs 应用启动 debugger 了么?

6

看起来是没有,这里需要我启动两个端口是这样吗,debug和服务端口

6

不是端口,你可以去文档搜下如何对一个运行中的 nodejs 进程启动 inspector,这个你都没起,自然不可能调试,本地加上 --inspect flag 后是启动的时候默认把 inspctor 也一起启动的

6

你需要去了解下 Node 的调试的相关知识。

9

好吧?,目前本地调试都能玩起来,本地调远程还是有点懵的,我试着找了资料,但是好像没有找到符合且可实践的

7

所谓的调试,其实就是远端开启调试模式,暴露了调试端口,然后通过调试工具远程 ws 连接上去。

开启方式有启动命令的 --inspect,也可以 kill -SIGUSR1 信号量,也可以用内置的 Inspector 模块来动态开启。

但:

  • 本地直接连上远程肯定不可能,需要远程那边开启调试能力,这个要看你的运维方式。
  • 本地调试远程是一种不安全的行为,尽量通过测试环境,或单元测试来解决问题。
1

第一点,远程开启调试能力就是指远程开启一个debug端口吗,我是不又绕回去了。 第二点,本地调试远程是在测试环境进行的。之所以我有这个问题是,有时候有些问题只会在特殊环境出现。 最后,大佬能给个联系方式吗。或者钉钉交流群什么的,那个群已经过期

3

我上面不是说了 3 种方式么:

  1. 要不你测试环境的启动脚本,默认都带上 --inspect,可以通过 NODE_OPTIONS 来传递。
  2. 要不你 ssh 上去,对指定的 process 进行 kill 指令
  3. 要不你代码里面预留一个后门,访问某个隐藏地址后,调用 inspector 来开启端口。

一般会做到运维系统里面去。

这只是开启调试,你还需要在网关层面允许这几个端口被防火墙放行。 而且要注意的事,正式环境一般是多进程,所以你要注意开启调试的进程,不一定是你正在 HTTP 访问的进程。