Skip to content

TS 调试速查 ​

一条规则 ​

进程会一直活着 → --inspect;跑完就退 → --inspect-brk

参数连上之前程序走没走连上之后用于
--inspect已在跑继续跑长驻进程(koa / --watch / dev server)
--inspect-wait没跑立刻跑要确保连上再启动,但不需要停
--inspect-brk没跑停住等你按继续跑完就退的脚本

--inspect 只是把调试端口开出来,它不暂停。脚本 50ms 就跑完退出,等你去 chrome://inspect 连的时候进程早没了 —— 所以短脚本必须用 -brk。

两个必踩的坑 ​

1. 参数必须在脚本路径前面

Node 遇到第一个非选项参数就停止解析 Node 参数,后面的全当脚本自己的 argv:

bash
node src/ts/bigNumber.ts --inspect   # ❌ --inspect 成了脚本参数,inspector 根本没启动
node --inspect src/ts/bigNumber.ts   # ✅

2. -brk 是 --inspect-brk 的一部分,不能拆开

bash
node --inspect -brk x.ts   # ❌ node: bad option: -brk

本项目怎么跑 ​

bash
# 顶层直接执行的脚本
node --inspect-brk src/ts/bigNumber.ts

# 用了 enum / namespace / 构造函数参数属性等不可擦除语法的,加 tsx
node --inspect-brk --import tsx src/ts/xxx.ts

Node 24 原生擦除类型,纯可擦除语法的文件不用 tsx。

连调试器:Chrome 打开 chrome://inspect → Open dedicated DevTools for Node。 想在 Sources 里看到 .ts 源码、断点下在 .ts 上,需勾上 DevTools 的 Settings → Preferences → Sources → Enable JavaScript source maps。

VS Code(省事得多) ​

命令行调短脚本要抢时间,launch.json 则是 VS Code 自己启进程 → 先设断点 → 再放它跑:

jsonc
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "调试当前 TS 文件",
      "type": "node",
      "request": "launch",
      "program": "${file}",
      "runtimeArgs": ["--import", "tsx"],
      "console": "integratedTerminal",
      "skipFiles": ["<node_internals>/**"]
    }
  ]
}

打开 .ts → 行号左边点红点 → F5。

三种好用的断点:

  • 条件断点 —— 右键红点 → 条件写 i === 3,循环里不用手点几百次
  • 日志断点 —— 右键 → 写 i={i},不暂停只打日志,等于免改代码的 console.log
  • 异常断点 —— Debug 面板勾上 Caught Exceptions,一抛异常就停在案发现场,查 bug 性价比最高