vscode中node脚本错误未上报sentry,主因是环境变量未配置、sentry.init()初始化过晚或捕获点未覆盖执行路径;需确保终端可执行node、sentry.init()置于入口文件顶部、正确监听uncaughtexception/unhandledrejection,并避开调试器干扰。

VSCode 里跑 Node 脚本并上报错误到 Sentry,关键不是装一堆插件,而是环境变量、SDK 初始化时机、以及捕获点是否覆盖真实执行路径。本地调试时 Sentry 没收到错误,90% 是 process.on('uncaughtException') 没生效或 Sentry.init() 太晚。
确保 Node 环境在 VSCode 内可用
VSCode 本身不自带 Node 运行时,它只是调用你系统已安装的 node。验证方式很简单:打开集成终端(Ctrl+`),执行 node -v 和 npm -v。如果报“command not found”,说明 PATH 没配对——不是 VSCode 问题,是 Shell 启动方式导致的。
- macOS 用户检查
~/.zshrc或~/.bash_profile是否导出了 Node 的 bin 路径(比如/opt/homebrew/bin) - Windows 用户确认 VSCode 是从支持 Node 的终端(如 PowerShell 或 Git Bash)启动的,而不是快捷方式直启(可能继承不到系统 PATH)
- VSCode 设置里搜
terminal.integrated.defaultProfile,选一个能识别node的 shell
初始化 Sentry 必须早于任何业务代码执行
Sentry.init() 不能塞在某个函数里,也不能等 vscode.ExtensionContext 就绪后再调——Node 进程一启动就得初始化,否则 uncaughtException 监听器注册失败,panic 或顶层异常就漏掉了。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 入口文件(如
index.js或extension.js)顶部第一行就该是require('@sentry/node')和Sentry.init() - DSN 必须硬编码或从
process.env.SENTRY_DSN读取;别用.env文件加载,Node 默认不解析它,除非你显式用了dotenv - 若项目用 ES Module(
type: "module"),要用import * as Sentry from '@sentry/node',且init()仍需在最顶部
捕获不到 unhandledRejection?检查 Promise 创建上下文
很多 Node 错误其实是 Promise reject 后没被 .catch() 或 await 捕获,触发 unhandledRejection 事件。但这个事件只监听当前 event loop 阶段创建的 Promise —— 如果你在 setTimeout 或 fs.readFile callback 里抛错,而监听器还没注册完,就会漏掉。
- 把
process.on('unhandledRejection', ...)放在Sentry.init()后面、任何异步操作之前 - 避免在模块顶层写
await someAsyncFn(),这会把 Promise 创建提前到模块加载期,早于监听器注册 - 对关键异步路径(如命令执行、配置加载),手动加
.catch(e => Sentry.captureException(e)),别全指望全局监听
VSCode 调试时 Sentry 不上报?注意 dlv / node --inspect 的干扰
VSCode 调试 Node 时默认启用 --inspect,某些版本的 Node 会在调试模式下抑制未捕获异常的传播,导致 uncaughtException 事件不触发。这不是 Sentry 的锅,是 V8 的调试行为。
- 在
.vscode/launch.json中添加"console": "integratedTerminal",让错误输出落到终端而非调试控制台 - 临时关闭断点,运行一次看终端是否打印原始错误——如果终端有错但 Sentry 没记录,就是初始化或监听器问题;如果终端都没输出,就是调试器吞了异常
- 真正要验证 Sentry 上报,建议用
node index.js直接运行,绕过 VSCode 调试器
最容易被忽略的是:Sentry SDK 在 Node 环境默认不采集 HTTP 请求数据,@sentry/node 的 Http integration 需要显式启用,且只对 http/https 模块有效,对 axios 或 fetch 无效。如果错误来自 API 调用失败,得自己 try/catch 并 Sentry.captureException()。










