本文へ移動
cccskills
無料GitHub で公開

debugging-systematically

Systematic debugging methodology. Reproduce → Isolate → Hypothesize → Verify → Fix → Confirm.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md3.0 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

The 6-Step Debugging Protocol

Step 1: Reproduce Reliably

Before anything else, make the bug reproducible.

# Write a failing test that reproduces the bug
it('reproduces bug #123', async () => {
  // The exact scenario that causes the bug
  const result = await service.doThing(buggyInput);
  expect(result).toBe(expectedValue); // This fails currently
});

If you can't write a reproducible test, you don't understand the bug yet.

Step 2: Read the Error

Read the FULL error message + stack trace. Most bugs tell you exactly where they are.

Checklist:

  • What file and line number?
  • What was the actual value vs expected?
  • Is there an inner error wrapped in the outer one?

Step 3: Narrow the Scope (Binary Search)

Full system broken?
  → Is it the database connection or the business logic?
    → Is it in the controller or the service?
      → Is it in the query or the parsing?

Add console.log / breakpoints to establish:

  • What inputs enter the broken function?
  • What does the function actually return?

Step 4: Form a Hypothesis

State your hypothesis explicitly:

"I believe the bug is caused by [X] because [evidence Y]."

Common hypotheses:

  • Off-by-one error
  • Async/await missing (uncaught promise)
  • Null/undefined not handled
  • Type coercion (== vs ===)
  • Race condition
  • Stale cache/state

Step 5: Verify (Don't Fix Yet)

Prove your hypothesis is correct BEFORE fixing:

// Add assertion to confirm hypothesis
console.assert(typeof userId === 'string', `userId is ${typeof userId}`);

If the hypothesis is wrong, go back to Step 3.

Step 6: Fix and Confirm

  1. Apply the minimal fix
  2. Run the reproduction test — it should now pass
  3. Run the full test suite — nothing should break
  4. Write a regression test if one didn't exist

Common Bug Patterns

Async bugs:

// BUG: forgot await
const user = getUser(id); // returns Promise, not User
user.name; // undefined

// FIX:
const user = await getUser(id);

Null propagation:

// BUG: assuming chain never null
const name = user.profile.address.city;

// FIX:
const name = user?.profile?.address?.city ?? 'Unknown';

Race condition:

// BUG: two async ops on same resource
await Promise.all([updateUser(id, {a: 1}), updateUser(id, {b: 2})]);
// One update overwrites the other

// FIX: serialize or use atomic DB operation
await db.user.update({ where: {id}, data: {a: 1, b: 2} });

Tools

# Node.js debugging
node --inspect src/index.js
# Then open chrome://inspect

# Print full error stack
process.on('unhandledRejection', (reason) => {
  console.error('Unhandled rejection:', reason);
});

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

anoa

無料

Drive a real browser from the command line — open pages, snapshot the interactive elements as refs, click and fill by ref, read text, run JS, screenshot. Use when a task needs a live browser: checking a page renders, walking a login or checkout flow, scraping something that only exists after JavaScript runs, or reproducing a UI bug.

日本語の概要は準備中です。原文の説明を表示しています。

porcupine-md/jonggrang152026年9月15日 更新

Run linters/typecheckers to calculate health score.

日本語の概要は準備中です。原文の説明を表示しています。

porcupine-md/jonggrang152026年9月15日 更新

Comprehensive UI/UX compliance check (A11y, performance, responsive).

日本語の概要は準備中です。原文の説明を表示しています。

porcupine-md/jonggrang152026年9月15日 更新

Infrastructure-first security audit (OWASP, secrets, dependencies).

日本語の概要は準備中です。原文の説明を表示しています。

porcupine-md/jonggrang152026年9月15日 更新

auth

無料

Setup authentication flow (register, login, session/JWT, middleware)

日本語の概要は準備中です。原文の説明を表示しています。

porcupine-md/jonggrang152026年9月15日 更新

Deep knowledge about deploying applications to AWS (EC2, ECS, S3, CloudFront, Cloud Run).

日本語の概要は準備中です。原文の説明を表示しています。

porcupine-md/jonggrang152026年9月15日 更新

porcupine-md のスキルをすべて見る

このスキルの問題を報告する