浅谈 Egg 进程调试
ImHype opened this issue · comments
对于软件开发而言,单步调试一直是定位问题的神器,一步一步确认排查可以让 bug 无所遁形。
本文是对 Egg 应用远程调试方式的整理,建议再阅读官网使用 egg-bin 调试保持最正确的理解。
最简单的 egg 调试流程
$ egg-bin debug
会发现命令行会输出 console:
$ Debug Proxy online, now you could attach to 9999 without worry about reload.
$ DevTools → chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9999/__ws_proxy__
将这条链接在浏览器打开,即可调试 Egg 的 worker 进程
- debug 模式打开,守护进程只会开启一个 worker 进程;
- 如果要本地调试测试环境,请把 127.0.0.1:9999 替换成测试环境 ip;
如何配置 master/agent/worker 进程的 debug 端口
由于测试机资源问题,可能会在一台云主机上部署多个 Node 应用,此时会出现 debug 端口冲突的问题,可以使用以下方式进行灵活地配置各个进程的 debug 端口号
$ EGG_AGENT_DEBUG_PORT=7878 egg-bin debug --proxy=9999 --inspect=7879
环境变量与参数说明:
- inspect
- master 进程调试端口直接取自 inspect 设置的值,默认 9229
- worker 进程调试端口会对 inspect 字段累加后取可用端口
- EGG_AGENT_DEBUG_PORT - agent 调试端口设定,默认 5800
- proxy - worker 进程调试端口设定(转发 websocket 协议到真实的 worker 进程调试端口),默认 9999
如何调试 agent 进程
对于一般的用户而言,不太需要关心 agent
进程的存在,但是对于插件开发者,可能需要对 agent
进程进行调试或者做性能问题排查,此时我们需要点亮 agent
进程调试的技能。
执行以下脚本启动应用:
$ npm run debug
找到第二条 debug 启动日志(master、 agent、worker的启动顺序)
默认值为 5800
使用 chrome 浏览器打开 chrome://inspect
,点击 Discover network targets
👉的 configure 按钮
点击 done 之后,你会发现 chrome://inspect
多了一个 agent 调试的 target
小结
以上为 egg 应用的一些简单的调试方法,对于:
- egg 为何需要 proxy worker 的 debug 协议
- 如何调试任意的 Node 进程
后面再做介绍
点赞👍
按EGG_AGENT_DEBUG_PORT=7878 egg-bin debug --proxy=9999 --inspect=7879这个方式启动后,负责转发的调试端口9999没有起来,能解释下原因吗,跟egg-bin版本会有关系吗
@yaoleilei 控制台是否有打印出 debugger listening 相关的日志
@yaoleilei 控制台是否有打印出 debugger listening 相关的日志
没有。我试着把版本提到4.10可以了,以前用的是3.4.x。