用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/HezaoHezao/poirot --skill node-inspect-debugger命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | node-inspect-debugger |
| description | Debug Node.js via --inspect + Chrome DevTools Protocol. |
| allowed-tools | ["bash","read_file"] |
| enabled | true |
| related-skills | ["systematic-debugging","python-debugpy"] |
| license | MIT |
| author | Adapted from hermes-agent (Nous Research, MIT) |
When console.log isn't enough, drive Node's built-in V8 inspector
programmatically from the terminal. Real breakpoints, step in/over/out,
call-stack walking, scope dumps, and arbitrary expression evaluation.
Prefer node inspect first. It's always available and the REPL is fast.
console.log can't reachDon't use for: things console.log solves in under a minute.
node inspect REPLLaunch 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 | continue |
n | next line (step over) |
s | step into |
o | step out |
sb('file.js', line) | set breakpoint |
cb('file.js', line) | clear breakpoint |
watch('expr') | watch expression |
exec('expr') | evaluate in paused frame |
backtrace / bt | show call stack |
list(N) | show N lines around current |
For automated debugging (many breakpoints, collect state across runs):
# Install
npm install chrome-remote-interface
# Launch node with inspect
node --inspect-brk=9229 path/to/script.js &
# Attach via script
node -e "
const CDP = require('chrome-remote-interface');
(async () => {
const client = await CDP({port: 9229});
const {Debugger, Runtime} = client;
await Debugger.enable();
await Runtime.enable();
Debugger.paused(({callFrames}) => {
console.log('Paused at:', callFrames[0].location);
// Inspect scope, evaluate expressions, etc.
});
// Set breakpoint
await Debugger.setBreakpointByUrl({lineNumber: 10, url: 'file:///path/to/script.js'});
await Debugger.resume();
})();
"
# Start with --inspect (no brk = doesn't pause on start)
node --inspect=9229 path/to/server.js
# Attach from another terminal
node inspect localhost:9229
# Start with inspect
node --inspect path/to/script.js
# In another terminal, capture profile
node -e "
const CDP = require('chrome-remote-interface');
(async () => {
const client = await CDP({port: 9229});
const {Profiler} = client;
await Profiler.enable();
await Profiler.start();
// Wait for workload...
await new Promise(r => setTimeout(r, 10000));
const {profile} = await Profiler.stop();
require('fs').writeFileSync('profile.cpuprofile', JSON.stringify(profile));
})();
"
# Load profile.cpuprofile in Chrome DevTools > Performance
--inspect doesn't pause; --inspect-brk
pauses on first line. Use brk when you need to catch early code.--inspect=9230.node inspect works with both, but ESM may show different
call stack formatting.--enable-source-maps for accurate mapping.