vscode调试器自动停在代码第一行需配置stoponentry: true,且必须置于.vscode/launch.json中与"type": "node"同级的configuration内,仅node.js支持,优先级高于普通断点。

VSCode怎么让调试器自动停在代码第一行?
不能靠手动点行号左侧加红点——那只是标记位置,不启动调试会话根本不会生效。真正让程序停在第一行,得靠调试器的 stopOnEntry 配置项,它是专为此设计的开关。
node.js 项目中启用 stopOnEntry 的正确写法
这个配置必须写进 .vscode/launch.json 的某个 configuration 里,且只对 Node.js 有效(Python、Go 等不支持)。常见错误是把它塞到全局或写错层级。
-
stopOnEntry是布尔值,只能写true或false,不能加引号变成字符串 - 必须和
"type": "node"、"program"在同一级对象内 - 如果同时设置了普通断点,
stopOnEntry优先级更高:它会在加载完脚本、执行任何用户代码前就暂停 - 示例片段:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch with stopOnEntry",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/index.js",
"stopOnEntry": true
}
]
}
Python / TypeScript / 浏览器项目没有 stopOnEntry 怎么办?
这些环境不提供原生首行暂停能力,但有等效替代方案:
- Python:在文件最顶部插入
breakpoint()(3.7+)或import pdb; pdb.set_trace(),效果一样,且兼容所有调试器 - TypeScript:确保
sourceMaps开启,并在编译后生成的.js文件第一行打手动断点;或直接在tsconfig.json中设"inlineSourceMap": false+"sourceMap": true,再配合 launch.json 的"sourceMaps": true - 浏览器(PWA):用
"url": "http://localhost:3000/"启动后,JS 执行前无法暂停;可行做法是在<script></script>标签内首行写debugger;,或在入口 JS 文件第一行加该语句
为什么 stopOnEntry 有时不触发?排查要点
不是所有 type 都支持它,也不是所有运行模式都走这条路径。最容易被忽略的是:
- 你点的是右上角绿色三角(Run Code),不是调试侧边栏的 ▶️ ——
stopOnEntry只在 F5 / 调试会话中起作用 - Node.js 版本太低(nodemon 类工具,它们绕过了 VSCode 的调试协议
-
program指向了一个不存在的文件,VSCode 会静默失败,不报错也不暂停 - launch.json 里有语法错误(比如多了一个逗号),整个 configuration 被忽略,
stopOnEntry彻底失效
首行暂停看似简单,但依赖调试器底层行为,一旦配置没落在“被识别的路径”上,就等于没写。











