-
-
Notifications
You must be signed in to change notification settings - Fork 107
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
VSCode 调试 Egg 完美版 - 进化史 #25
Comments
TODO: 补充 egg cluster 背景,重启时消息流向图(messenger, debug) +--------+
| Parent | (egg-scripts/egg-bin)
+--------+
|
|
v
+--------+ +-------+
| Master | --------> | Agent |
+--------+ +-------+
/ | \
/ | \
/ | \
v v v
+----------+ +----------+ +----------+
| Worker 1 | | Worker 2 | | Worker 3 |
+----------+ +----------+ +----------+ |
在启动调试之前,我先需要执行npm run debug 吗? |
不需要,你去看下 vscode 自己的调试指南就懂了 |
@atian25 我安装了 |
@atian25 EGG 选项出来了,但是 configurations 是空的。 |
那可能是 vscode 这块的 API 变了。 |
|
支持, |
或者 |
VSCode 1.22 新增 Auto Attach 功能,在 |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
几个月以来我都是用的下面这套配置,包括最近的 {
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Egg Debug",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run",
"debug"
],
"console": "integratedTerminal",
"restart": true,
"protocol": "auto",
"port": 9999
},
{
"type": "node",
"request": "launch",
"name": "Egg Debug with brk",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run",
"debug",
"--",
"--inspect-brk"
],
"protocol": "inspector",
"port": 9229
},
{
"type": "node",
"request": "launch",
"name": "Egg Test",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run",
"test-local",
"--",
"--inspect-brk"
],
"protocol": "auto",
"port": 9229
},
{
"type": "node",
"request": "attach",
"name": "Egg Attach to remote",
"localRoot": "${workspaceRoot}",
"remoteRoot": "/usr/src/app",
"address": "localhost",
"protocol": "auto",
"port": 9999
}
]
} |
赞,我这边好像需要 |
npm run debug,然后使用vscode Egg Attach to remote 可以。但是真的很容易断开啊,随便改的东西就需要重新执行 |
你连接 9999 端口就不会断了 |
等会 egg-cluster 这个 PR 合并发布后,就可以解决了。 vscode 最新版对 PS: 最近较忙,其实这种问题,遇到的同学,提炼一个最小可复现案例,跟 vscode 一反馈,早就能解决了。 microsoft/vscode#49865 就这么简单。 |
This comment has been minimized.
This comment has been minimized.
@atian25 感谢提供配置,可以在vscode调试eggjs了,vscode用的最新版1.28.2 package.json 增加
launch.json在configurations里增加
|
感谢提供调试配置。 我试了一下利用 ts + egg.js 的组合,然后只需要简单 |
请问在WSL里执行 npm run debug,再通过 chrome devtools 调试有试过吗?我遇到的问题是无法命中egg项目里自己写的代码的断点。chrome 70, egg 2.10.0, node 10.5.0 |
按我的判断跟 egg 本身关系不大。这种只能自己排查,跟环境有关。但只要你对 devtools 断点有理解,一般查起来很快。
hey, please retry after reinstall dependencies and please never lock it. $ # reinstall deps and never lock it.
$ rm -rf node_modules yarn.lock package-lock.json
$ npm i --no-package-lock
|
@shiyun node_modules 里的模块 debugger 的问题你解决了吗? |
今天vscode推送了1.32.1版本,升级以后Debug会卡住。去掉--inspect-brk可以启动成功,但无法打断点,报Breakpoint set but not yet bound。 —————————————— |
This comment has been minimized.
This comment has been minimized.
如何忽略进入node_module文件夹? |
请大家务必务必注意,现在的调试,就是 Node 自己的多进程调试,egg 并没有做什么处理。所以,大部分的问题,需要你们了解 VSCode 和 Node 本身在调试这块的知识。 |
更新下最新的一些信息:
|
请问在 win10 下,vscode 版本为1.34.0,在打开 autoAttach设置,使用 wsl 作为默认terminal的情况下, |
@whwnow 如果 autoAttach 开了但没有 attach,那就要找 VSCode 官方提 issue 了。 |
为何每次vscode debug egg项目,第一次打开都会停留在egg源码某个文件的'use strict'这一行 |
@Zuckonit 去掉 |
用了vscode的egg插件,配置默认带了--inspect-brk,或许这个不应该加到默认配置 |
@atian25 我找到解决方案了,在wsl中需要额外安装插件才可以 auto attach 。参考官方这个文档:https://code.visualstudio.com/docs/remote/wsl |
喔,你说最新的那个 Remote Development 吧 |
对,是那个 |
这个后来咋解决了? |
有个环境变量,可以翻下 egg-cluster 的 master.js 源码搜下 |
背景
VSCode 早期版本,对 Node Cluster 的调试支持一直不是很友好,譬如:
那些折腾过的历史
黑暗时代
早在 2016 年时就开始的折腾:#14 和 #15 ,没有太好的办法。
青铜时代
然后 @okoala 写了 egg-development-proxyworker
主要思路是在 agent 里面启动一个 socket proxy 来动态代理 worker 的调试端口。
很巧妙的解决了
自动重启后调试端口变化问题
,但缺点是要开发者手动安装插件,并配置 vscode。此时只能说达到可用的阶段。
黄金时代
接着,我写了
egg-bin debug
把 proxy 功能内置了,实现原理参见当时的 RFC 提案并且提供了 vscode-eggjs 扩展来方便配置。
解决了:
对于一般应用开发者基本上已经非常易用了,但还存在以下问题:
launch.json
对同时 attach 多个的支持不是很友好,虽然有compounds
。brk
的话要手动 attach 3 次,非常麻烦。而今天,[email protected] 正式支持了 Automatically attach debugger to Node.js subprocesses
因此我们之前的做法可以大幅简化了,没解决的问题也基本解决了,可以称为
完美版
了。完美版的人生
文档已经更新:使用 VSCode 进行调试
安装 vscode-eggjs,并初始化调试配置(如果之前有则需删除 launch.json 文件)
然后简单的一个
F5
搞定~简析
其他
vscode 扩展生成的配置里面,还支持了单元测试的断点,配置如下:
完美版.最终版1
VSCode 1.22 支持了
Automatically Attach to Node.js processes
,也就是如果你开启了这个的话,无需配置什么launch.json
,直接在 terminal 执行npm run debug --inspect-brk
就会自动 attach 了。补充
Egg 的调试,跟 Node 没啥区别,因此一定要了解 Node 的基础调试知识。
其中,
--inspect-brk
是指在进程第一行就暂停,等待 attach,因此:上面这几个 attach,由于上面我们提到的 VSCode 的支持,只需要开启配置,即可无感知的一键 attach。
虽然如此,但作为开发者,大家还是需要理解 Node 的调试原理。
The text was updated successfully, but these errors were encountered: