浅谈 Egg 进程调试

@ImHype 2018-07-31 15:13:39发表于 kaola-fed/blog 待归档

对于软件开发而言,单步调试一直是定位问题的神器,一步一步确认排查可以让 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的启动顺序)
image

默认值为 5800

使用 chrome 浏览器打开 chrome://inspect,点击 Discover network targets 👉configure 按钮
image

配置 agent 进程的 debug 端口号
image

点击 done 之后,你会发现 chrome://inspect 多了一个 agent 调试的 target
image

小结

以上为 egg 应用的一些简单的调试方法,对于:

  • egg 为何需要 proxy worker 的 debug 协议
  • 如何调试任意的 Node 进程

后面再做介绍