VSCode默认不显示完整异步调用链,必须在launch.json中配置runtimeArgs包含["--enable-source-maps", "--async-stack-traces"],且Node.js≥12、sourceMap启用并路径匹配,否则堆栈无法映射回源码。

VSCode 默认不显示完整异步调用链,必须显式启用 --async-stack-traces 和 --enable-source-maps,缺一不可。
launch.json 必须加 runtimeArgs 才生效
仅靠 VSCode 界面勾选或 DevTools 设置对 Node.js 调试器无效——它不走 Chrome 的 Preferences 逻辑,而是依赖 Node 进程启动参数。
-
runtimeArgs必须包含["--enable-source-maps", "--async-stack-traces"],顺序无关,但两个都得有 - 只加
--async-stack-traces会导致堆栈里全是node:internal/...或空路径,因为 source map 未启用,无法映射回源码 - Node.js 版本需 ≥ 12(推荐 ≥ 18.19,该版本起默认增强异步堆栈,但显式声明仍更稳妥)
- 若用 TypeScript,确认
tsconfig.json中"sourceMap": true已开启,且outDir与launch.json中的program路径匹配
resolveSourceMapLocations 防止点不开源码
Call Stack 里看到 async function foo 并带 [Async] 标记,但右键“转到源代码”打不开 src/foo.ts?大概率是 sourcemap 路径解析失败。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 常见现象:堆栈帧显示
webpack:///src/foo.ts或/path/to/dist/foo.js,点击跳转失败 - 在
launch.json配置中添加"resolveSourceMapLocations"字段,明确告诉调试器去哪里找源码 - 典型值:
["${workspaceFolder}/src/**", "${workspaceFolder}/node_modules/**"] - Webpack 用户额外检查
devtool是否为"source-map"或"inline-source-map";禁用"eval"类型,它不生成独立 .map 文件
await 行设断点,别在 .then 里硬扛
.then(() => { /* 断点在这 */ }) 是异步堆栈的“断点黑洞”——即使启用了 --async-stack-traces,也几乎无法还原上层调用者。
- Promise 规范决定
.then回调是全新微任务,与发起者无堆栈继承关系 - 真正有效的锚点是
await表达式所在行(不是await后面那行),VSCode 会在此暂停并向上还原整个 async 链 - 遇到老项目大量
.then,临时补console.trace()比设断点更直接;长期应逐步迁移到async/await - 避免
Promise.resolve().then()或queueMicrotask()包裹逻辑,它们会插入无关微任务,稀释原始调用上下文
异步堆栈能显示,不代表它一定可靠——sourcemap 路径错一位、outFiles 漏配一个 glob、甚至 Webpack 的 output.devtoolNamespace 冲突,都会让 [Async] 帧变成“看得见、点不开”的幽灵节点。















