断点不生效主因是source map未对齐或运行时未启用支持;空心红点即“unbound breakpoint”,表明VSCode未将TS行号映射到可执行代码,需检查文件是否保存、语言模式是否为TypeScript、tsconfig.json中sourceMap是否启用,以及Node 24+版本配置或ts-node的--enable-source-maps参数是否正确设置。

断点打在.ts文件上却不停,根本不是VSCode的问题,而是source map没对齐或运行时没启用支持。
断点不生效:先看红点是不是实心的
空心圆 = Unbound breakpoint,说明VSCode压根没把这行和可执行代码关联上。常见原因有三个:
- 文件没保存——
.ts文件修改后必须按Ctrl+S,否则调试器读的是旧缓存 - 语言模式不对——右下角状态栏要显示
TypeScript,不能是Plain Text或JavaScript -
tsconfig.json里没开"sourceMap": true,或者开了"inlineSourceMap": true(VSCode更认独立.map文件)
Node.js直接运行TS:必须用Node 24+并配runtimeVersion
不用ts-node也能调试原生.ts文件,但前提是Node版本≥24且launch.json明确指定:
-
runtimeVersion字段填"24.3.0"这类具体版本号(不是"latest") -
program直接指向.ts入口,比如"${workspaceFolder}/src/index.ts" - 删掉
outFiles和sourceMaps字段——Node 24+内置支持,加了反而干扰
用ts-node调试:launch.json里别漏--enable-source-maps
如果还是用ts-node,断点漂移到.js里或变量名变_a,大概率是没传源码映射开关:
-
runtimeExecutable设为"npx"或"ts-node"路径 -
runtimeArgs里必须包含"--enable-source-maps"(注意是双横线) -
program仍写.ts路径,但cwd要设成项目根目录,否则ts-node找不到tsconfig.json
变量看不到或显示undefined:关掉V8优化再试
尤其在循环、箭头函数或内联函数里,V8可能把局部变量优化掉。临时解决办法是加启动参数:
- 在
runtimeArgs里追加"--nolazy"和"--no-opt" - 避免在
for...in或eval()动态作用域里设断点——那里本来就不支持变量映射 - 如果用了
const声明但值是对象,hover看属性是空的?试试在Debug Console里手动输入JSON.stringify(obj)
最易被忽略的一点:每次改完tsconfig.json或launch.json,必须重启VSCode调试会话(不是重载窗口),否则旧配置还在内存里跑着。


















