Linux环境下JS调试方法
小樊
45
2025-11-16 18:53:16
Linux环境下JS调试方法
一 核心工具与适用场景
- Node.js 内置调试:使用 node inspect 或 node --inspect / --inspect-brk 启动调试,配合 Chrome DevTools 或命令行调试器进行断点、单步、观察表达式等。适合命令行脚本、后端服务、CLI 工具。
- VS Code 调试:通过 Run and Debug 一键启动,图形化断点、条件断点、变量/调用栈查看,适合日常开发。
- Chrome DevTools 与远程调试:前端页面或 Node.js 均可接入 chrome://inspect;无头/远程环境可用 –remote-debugging-port=9222 暴露调试端口,结合 WebSocket 与 Chrome DevTools Protocol(CDP) 进行远程/自动化调试。
- 日志与问题定位:合理使用 console 与日志库(如 winston、morgan、bunyan),配合 tail -f、ELK 等聚合分析,快速还原问题现场。
二 快速上手步骤
-
使用 Node.js 内置调试
- 启动:
- 交互式调试:node inspect app.js
- 远程接入:node --inspect app.js(或首行暂停:node --inspect-brk app.js)
- 在 Chrome 打开 chrome://inspect,在 Remote Target 中点击 Inspect 进入 DevTools。
- 在 DevTools 的 Sources 面板设置断点、使用 Step Over/Into/Out、观察 Scope 与 Console。
- 命令行调试常用命令:c(continue)、n(next)、s(step in)、o(step out)、repl(进入 REPL)、watch(‘expr’)(监视表达式)。
-
使用 VS Code 调试
- 打开项目,点击左侧 Run and Debug,创建 launch.json。
- 使用如下配置并启动:
{
“version”: “0.2.0”,
“configurations”: [
{
“type”: “node”,
“request”: “launch”,
“name”: “Launch Program”,
“program”: “${workspaceFolder}/app.js”,
“skipFiles”: [“<node_internals>/**”]
}
]
}
- 在代码行号左侧点击设断点,按 F5 启动,利用 调试控制台 评估表达式与查看变量。
三 远程与无头环境调试
- 远程调试 Chrome 标签页(同一台 Linux 主机或可控环境)
- 启动带调试端口的 Chrome:
google-chrome --remote-debugging-port=9222
- 访问 chrome://inspect/#devices,在 Configure 中添加 localhost:9222,即可发现并 Inspect 目标页面。
- 远程调试 Node.js(服务器/容器/无头环境)
- 启动应用:
node --inspect-brk=9229 app.js
- 在本地 Chrome 打开 chrome://inspect,在 Remote Target 中连接并调试。
- 无头/CI 场景可用 Puppeteer 启动 Chromium 并获取 WebSocket 调试地址(如 ws://127.0.0.1:…/devtools/browser/…),实现自动化或远程接入。
- 安全提示:开放 9222/9229 等端口时请限制来源 IP、使用认证或 SSH 隧道,避免暴露到公网。
四 日志与问题定位技巧
- 增强日志可读性:使用 console.error()/warn()/info() 分层输出;用 console.time(‘label’) / console.timeEnd(‘label’) 做性能对比;必要时使用 debug 模块按命名空间开关日志。
- 生产定位:确保生成 Source Map,在 DevTools 的 Sources 面板映射回原始源码;结合 条件断点、DOM 断点 与 异常断点 精确定位。
- 日志文件与实时查看:将日志写入文件,使用 tail -f /path/to.log 实时跟踪;大型项目建议引入 winston/morgan/bunyan 做结构化与分级日志。
- 环境与依赖:核对 环境变量/配置 是否正确;必要时回退或升级依赖版本以规避已知问题。
五 常见问题与排查清单
- 看不到 Remote Target:确认应用已以 –inspect 启动;如使用 –inspect-brk 请确认进程已暂停并等待调试器接入;检查 9222/9229 端口占用与防火墙策略。
- 断点未命中:确认 Source Map 正确加载;检查 skipFiles 配置是否屏蔽了依赖包;前端代码是否经过打包导致行号偏移。
- 无法连接远程 Chrome:使用 –remote-debugging-port=9222 启动目标浏览器;在 chrome://inspect 的 Configure 中正确填写 localhost:9222;如为容器/远程主机,确保端口转发或 SSH 隧道可达。
- 多进程/子进程:子进程不会自动附加,需在子进程启动命令中也加入 –inspect 或使用 ndb 等工具增强多进程调试体验。