| domain | archive |
|---|---|
| title | Node Inspect Debugger |
| verification | metadata-normalized |
| source | skill-pipeline |
| status | draft |
| created | 2026-05-09 |
(此 lesson 从 skill node-inspect-debugger 自动提取,待补全)
(待补充)
When console.log isn't enough, drive Node's built-in V8 inspector programmatically from the terminal. You get real breakpoints, step in/over/out, call-stack walking, local/closure scope dumps, and arbitrary expression evaluation in the paused frame.
Two tools, pick one:
node inspect— built-in, zero install, CLI REPL. Best for quick poking.ndb/ CDP viachrome-remote-interface— scriptable from Node/Python; best when you want to automate many breakpoints, collect state across runs, or debug non-interactively from an agent loop.
Prefer node inspect first. It's always available and the REPL is fast.
- A Node test fails and you need to see intermediate state
- ui-tui crashes or behaves wrong and you want to inspect React/Ink state pre-render
- tui_gateway child processes (
_SlashWorker, PTY bridge workers) misbehave - You need to inspect a value in a closure that
console.logcan't reach without patching - Perf: attach to a running process to capture a CPU profile or heap snapshot
Don't use for: things console.log solves in under a minute. Breakpoint-driven debugging is heavier; use it when the payoff is real.
Launch paused on first line:
node inspect path/to/script.js
# or with tsx
node --inspect-brk $(which tsx) path/to/script.tsThe debug> prompt accepts:
| Command | Action |
|---|---|
c or cont |
continue |
n or next |
step over |
s or step |
step into |
o or out |
step out |
pause |
pause running code |
sb('file.js', 42) |
set breakpoint at file.js line 42 |
sb(42) |
set breakpoint at line 42 of current file |
sb('functionName') |
break when function is called |
cb('file.js', 42) |
clear breakpoint |
breakpoints |
list all breakpoints |
bt |
backtrace (call stack) |
list(5) |
show 5 lines of source around current position |
watch('expr') |
evaluate expr on every pause |
watchers |
show watched expressions |
repl |
drop into REPL in current scope (Ctrl+C to exit REPL) |
exec expr |
evaluate expression once |
restart |
restart script |
kill |
kill the script |
.exit |
quit debugger |
In the repl sub-mode: type any JS expression, including access to locals/closure variables. Ctrl+C exits back to debug>.
When the process is already running (e.g. a long-lived dev server or the TUI gateway):
# 1. Send SIGUSR1 to enable the inspector on an existing process
kill -SIGUSR1 <pid>
# Node prints: Debugger listening on ws://127.0.0.1:9229/<uuid>
# 2. Attach the debugger CLI
node inspect -p <pid>
# or by URL
node inspect ws://127.0.0.1:9229/<uuid>To start a process with the inspector from the beginning:
node --inspect script.js # listen on 127.0.0.1:9229, keep running
node --inspect-brk script.js # listen AND pause on first line
node --
## 验证
(待补充)