调试与编辑器配置

配置 VS Code 与 deno lsp,用 --inspect 断点调试并定位权限与泄漏问题

VS Code 扩展

安装官方扩展 denoland.vscode-deno,然后在命令面板执行 Deno: Initialize Workspace Configuration。它会在工作区的 .vscode/settings.json 写入:

{
  "deno.enable": true
}
  • 只在工作区级启用,不要写进用户级设置,否则每个项目都会被当作 Deno 项目。
  • 启用后扩展用 Deno 语言服务器接管,并关闭 VS Code 内置的 TS/JS 诊断。
  • 混合仓库用 deno.enablePaths 只对子目录(如 ./supabase/functions)启用。

其他编辑器通过 LSP 接入同一个语言服务器:

deno lsp

遇到异常先用命令面板的 Deno: Language Server Status 确认当前生效的配置。

Inspector 断点调试

Deno 支持 V8 Inspector 协议,三个标志对应三种启动方式:

标志行为
--inspect启动调试服务端,代码立即执行
--inspect-wait等待调试器连接后再执行
--inspect-brk等待连接并在第一行断住

默认监听 127.0.0.1:9229。用 Chromium 内核浏览器打开 chrome://inspect,点击目标旁的 Inspect 即可断点、单步,并通过 sourcemap 直接看到原始 TypeScript。

VS Code 用 attach 配置连接:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to dev server",
      "type": "node",
      "request": "attach",
      "port": 9229
    }
  ]
}
deno run --inspect-wait --allow-net main.ts

权限与泄漏排错

权限报错方向不明时,让运行时给出触发点的栈:

DENO_TRACE_PERMISSIONS=1 deno run main.ts

测试报资源或异步操作泄漏时,追踪泄漏来源:

deno test --trace-leaks

--trace-leaks 会拖慢测试执行,定位完就移除,不要常驻 CI。两个手段都只用于诊断,输出本身不包含修复方案。

日志分层

  • 开发期用 console.log / console.error,它们走 stdout/stderr,容器平台天然收集。
  • 生产日志输出结构化 JSON(每行一个对象,带 levelmsgrequestId 字段),避免正则解析自由文本。
  • Deno 运行时自身的诊断(模块解析、网络、权限决策)用 --log-level=debug 打开,定位问题后关闭;第三方库的日志等级由库自身配置控制,该 flag 管不到。
  • 日志不包含密钥与个人数据;见环境变量与 .env 管理

官方参考:DebuggingVS Codedeno test

输入关键词搜索全部文档。