Mac系统WebStorm 2018.1调试Node.js应用时无法查看Frames
我之前也碰到过一模一样的情况——用WebStorm调试基于Cluster模块的Node.js应用,明明文档说子进程会以线程形式出现在Frames面板,但就是看不到。后来试了几个方法解决了,你可以逐一排查:
检查调试配置的Node参数
打开Run/Debug Configurations里的你的Node.js调试配置,在Node parameters字段里加上--inspect=0。这个参数会让Cluster创建的子进程自动分配可用的调试端口,WebStorm才能自动捕获到这些子进程。如果没加这个,子进程可能没有开启调试模式,自然不会出现在Frames面板里。确认Cluster代码的启动逻辑
确保你的Cluster启动代码是标准写法,别手动覆盖了调试相关的参数。比如如果在cluster.fork()时传入了自定义的execArgv,一定要把--inspect相关参数包含进去。举个标准的Cluster启动示例:const cluster = require('cluster'); const os = require('os'); if (cluster.isPrimary) { console.log(`主进程 ${process.pid} 运行中`); for (let i = 0; i < os.cpus().length; i++) { cluster.fork(); } } else { console.log(`工作进程 ${process.pid} 已启动`); // 这里写你的应用业务逻辑 }开启Frames面板的线程显示
有时候是自己不小心关了线程显示开关。打开调试工具窗口,点击右上角的齿轮图标,确认Show threads选项是勾选状态。没勾选的话,Frames面板就不会显示任何线程。升级WebStorm到最新稳定版
旧版本的WebStorm对Cluster模块的调试支持可能存在兼容性bug,比如动态端口分配的处理问题。我之前用老版本时就有这个问题,升级到最新版后就正常了。清理进程后重启调试
偶尔会有进程残留或者缓存导致调试器异常。先停止所有调试会话,用killall node(Mac/Linux)或者任务管理器(Windows)清理所有Node.js进程,然后重启WebStorm再启动调试试试。
内容的提问来源于stack exchange,提问作者morpheus

