Skip to content

Latest commit

 

History

History
109 lines (80 loc) · 3.35 KB

File metadata and controls

109 lines (80 loc) · 3.35 KB
domain archive
title Node Inspect Debugger
verification metadata-normalized
source skill-pipeline
status draft
created 2026-05-09
provenance
source contributor merged_at evidence
external
Unknown
2026-08-23
post-publication

背景

(此 lesson 从 skill node-inspect-debugger 自动提取,待补全)

根因

(待补充)

修复

Node.js Inspect Debugger

Overview

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 via chrome-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.

When to Use

  • 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.log can'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.

Quick Reference: node inspect REPL

Launch paused on first line:

node inspect path/to/script.js
# or with tsx
node --inspect-brk $(which tsx) path/to/script.ts

The 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>.

Attaching to a Running Process

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 --

## 验证

(待补充)