VSCode调试Node.js无需额外插件,但需确保node在PATH中、有入口文件,并手动配置launch.json;支持普通/条件断点、Debug Console变量查看、Watch面板表达式监控,注意source map与Node版本兼容性。

VSCode 调试 Node.js 应用不需要额外装插件(内置支持),但必须确保 node 在系统 PATH 中,且项目有可运行的入口文件(如 index.js 或 app.js)。
配置 launch.json 启动调试会话
这是最常卡住的一步:VSCode 不会自动创建调试配置,必须手动初始化。按下 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Debug: Open launch.json,选择 Node.js 环境后生成默认配置。
- 若项目使用
npm start启动,推荐用runtimeExecutable指向本地node_modules/.bin/npm,并设args为["start"] - 直接调试 JS 文件时,把
program改成相对路径,例如"${workspaceFolder}/src/server.js" - 启动前务必确认
console输出里没有Cannot find module或ERR_INVALID_ARG_VALUE—— 这类错误会导致调试器静默退出,看似“没反应”
在代码中设置断点与条件断点
点击行号左侧灰色区域即可添加普通断点;右键该红点可编辑为条件断点或日志点。条件断点只在表达式为真时暂停,比如在循环里调试特定 ID:
if (user.id === 123) {
console.log('hit'); // 此处设断点,右键 → Edit Breakpoint → 输入 user.id === 123
}
- 条件表达式里不能写函数调用(如
process.env.NODE_ENV === 'dev'可以,getUserId()不行) - 异步代码中(如
Promise.then()内部),断点可能被跳过——建议在async函数顶部或await行设断点 - 如果断点变成空心红圈,说明 VSCode 无法绑定到源码,常见于未启用 source map 或构建产物路径不匹配
使用 Debug Console 监控变量与执行表达式
调试停住后,打开 Debug Console(不是 Terminal),可以直接输入变量名查看值,或调用当前作用域内的函数:
- 输入
req.url查看 Express 请求路径(前提是断点在请求处理函数内) - 输入
Object.keys(global)快速扫全局对象属性 - 注意:不能在
Debug Console里修改const声明的变量,但可以改let/var变量,用于临时验证逻辑 - 若看到
ReferenceError: xxx is not defined,大概率是变量不在当前作用域(比如在闭包外访问内部变量)
Watch 面板动态跟踪表达式变化
比起反复切到 Debug Console,Watch 面板更适合持续观察关键状态。点击 “+” 添加表达式,例如:
-
process.memoryUsage().heapUsed—— 实时看内存占用 -
Object.keys(require.cache).length—— 检查模块缓存是否异常增长 -
err?.stack—— 在 catch 块里监控错误堆栈(可避免重复展开)
Watch 表达式不支持语句(如 console.log()),只接受纯表达式;若显示 cannot evaluate,通常是因为变量尚未初始化或已超出作用域。
断点位置、source map 路径、Node 版本兼容性这三者稍有不匹配,就容易出现“断点无效”或“变量显示 undefined”。别急着重装插件,先检查 launch.json 的 outFiles 和 sourceMaps 是否与构建输出一致。










