VSC 1.43.2,TS 3.8.3,节点v13.11.0
使用默认的编译目标,TSC将生成器功能展开到switch语句中。然后,交互式调试器可以在每次调用生成器的next()
方法时出入调用。
但是,当以保留生成器功能的JS编译目标为目标时,调试器可以进入调用以创建生成器,但是在生成器内部进行 stepping 绝不会导致调试器退出。
例如,如果您中断了对示例文件中gen()
的调用,然后按F11进入生成器功能,则按F10的任何量都不会退出该功能。文件的其余部分将在调试器仍在生成器范围内的情况下执行。如果您在打给next()
的电话时打断电话,然后按F11键,则行为相同。
这是VSC调试器的限制,还是我需要设置一些其他配置以获得更直观的交互式调试体验?
启动配置:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "some name",
"program": "${file}",
"outFiles": ["${workspaceFolder}/**/*.js"],
"runtimeArgs": ["--experimental-modules", "--es-module-specifier-resolution=node"],
"smartStep": true,
}
]
}
TS配置:
{
"compilerOptions": {
"sourceMap": true,
"target": "ESNext"
},
}
TS文件示例:
function* gen() {
for (let i = 0; i < 3; i++) {
yield i;
}
}
const x = gen();
const y = 2 + 2;
console.log(x.next());
console.log(x.next());
console.log(x.next());