CentOS 环境下 Node.js 代码调试指南
一 内置调试与 Chrome DevTools
- 启动方式
- 普通调试:运行命令:node --inspect app.js,调试器会在 9229 端口监听。
- 首行暂停:运行命令:node --inspect-brk app.js,在第一行代码处自动中断,便于从入口开始逐步调试。
- 本地图形界面连接
- 在本地机器(如 Windows/macOS)打开 Chrome,访问:chrome://inspect。
- 在 “Remote Target” 中点击 Inspect 打开 DevTools,使用 Sources 面板设置断点、查看调用栈与变量。
- 服务器无图形界面
- 将服务器的 9229 端口通过 SSH 转发到本地:运行命令:ssh -L 9229:127.0.0.1:9229 user@your-centos-host。
- 保持该 SSH 连接,然后在本地 Chrome 打开 chrome://inspect 连接调试。
- 常用断点与观察
- 在代码中插入 debugger; 语句,命中断点后可在 DevTools 中单步、观察表达式与作用域。
- 适用场景
- 快速排查启动期问题、异步回调、异常堆栈定位、变量快照等。
二 使用 VS Code 远程调试
- 前置准备
- 在 CentOS 上运行:node --inspect-brk app.js(或 --inspect),保持进程运行。
- 在本地或跳板机上将 9229 端口转发到本机(见上节)。
- VS Code 配置
- 在项目根目录创建 .vscode/launch.json,示例:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach to Remote",
"address": "127.0.0.1",
"port": 9229,
"skipFiles": ["<node_internals>/**"]
}
]
}
- 按 F5 启动调试,在 VS Code 中设置断点、观察变量与调用栈。
- 适用场景
- 团队协作、断点条件/日志点、与测试脚本联动、断点命中率高的复杂逻辑。
三 命令行与日志排查
- 快速定位
- 查看版本与依赖:运行 node -v、npm -v、npm install 确保依赖完整。
- 终端直接运行观察报错栈,优先修复语法/引用/运行时错误。
- 日志与系统信息
- 实时查看应用日志:tail -f /path/to/logfile。
- 查看系统日志:journalctl -u your-service(如使用 systemd 托管)。
- 环境与网络
- 核对环境变量:printenv 或检查启动脚本中的 process.env。
- 检查端口占用与连通性:例如 netstat -tulpen | grep 9229 或 ss -ltnp | grep 9229;远程调试需确保云服务器安全组/防火墙放行 9229。
- 适用场景
- 无法使用图形界面时的快速问题定位、生产环境的最小干扰排查。
四 进阶与性能分析
- 诊断工具
- 使用 clinic.js 进行性能剖析:例如 clinic bubbleprof – node app.js,压测后自动生成可视化报告,定位 CPU/内存/事件循环 瓶颈。
- 代码级打点与异步追踪
- 使用 perf_hooks 进行高精度计时与测量:
import { performance, PerformanceObserver } from 'perf_hooks';
performance.mark('start');
// ... your code
performance.mark('end');
performance.measure('work', 'start', 'end');
new PerformanceObserver(list => {
list.getEntries().forEach(e => console.log(e.name, e.duration));
}).observe({ entryTypes: ['measure'] });
- 使用 async_hooks 追踪异步资源生命周期,辅助定位回调/定时器等引发的疑难问题。
- 适用场景
- CPU 占用高、内存泄漏、请求延迟抖动、异步上下文丢失等性能与稳定性问题。
五 常见问题与排查清单
- 无法在 chrome://inspect 看到目标
- 确认进程以 –inspect/–inspect-brk 启动;检查 9229 端口监听与转发是否正确;云主机需放行安全组/防火墙。
- 端口被占用
- 更换调试端口:node --inspect=9230 app.js;或释放占用端口后再启动。
- 断点不生效或源码不匹配
- 使用 –inspect-brk 从入口暂停;确保部署包与本地源码一致,或使用 Source Map。
- 依赖或权限问题
- 重新安装依赖:npm ci;检查运行用户对代码与日志目录的读写权限。
- 版本不兼容
- 核对 Node.js 与依赖包版本,必要时升级到稳定版本。