调试与编辑器配置
配置 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(每行一个对象,带
level、msg、requestId字段),避免正则解析自由文本。 - Deno 运行时自身的诊断(模块解析、网络、权限决策)用
--log-level=debug打开,定位问题后关闭;第三方库的日志等级由库自身配置控制,该 flag 管不到。 - 日志不包含密钥与个人数据;见环境变量与 .env 管理。