[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AD0Z5MW9ZNMJMJC9VXCSG3":3,"skill-same:01M6AD0Z5MW9ZNMJMJC9VXCSG3":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":16,"sourceHtmlUrl":17,"categories":18,"keywords":19,"publishedAt":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M6AD0Z5MW9ZNMJMJC9VXCSG3","software-debugging",null,"Master systematic debugging techniques, profiling tools, and root cause analysis to efficiently track down bugs across any codebase or technology stack. Use when investigating bugs, performance issues, or unexpected behavior.","Significant-Gravitas\u002Fskills-catalog","Significant-Gravitas","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130738209?v=4","01M6AC83EPDGBFN19MWYRREJD0","AutoGPT","01M6ACEY98TKHDWJH0B93PHNMG",2,"MIT","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fsoftware-debugging\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fsoftware-debugging\u002FSKILL.md",[],[20,21,22,23,24,25,26,27,28],"debugging","software debugging","github","performance","root cause analysis","systematic debugging","issues","https","plugins","2026-11-10 10:12:30",false,"---\nname: software-debugging\ndescription: Master systematic debugging techniques, profiling tools, and root cause analysis to efficiently track down bugs across any codebase or technology stack. Use when investigating bugs, performance issues, or unexpected behavior.\nlicense: MIT\nmetadata:\n  author: Seth Hobson\n  source: wshobson\u002Fagents\u002Fplugins\u002Fdeveloper-essentials\u002Fskills\u002Fdebugging-strategies\n  source_url: https:\u002F\u002Fgithub.com\u002Fwshobson\u002Fagents\u002Fblob\u002F4236bb91f8395b0435f1d8b8baf9e8e4c69a8620\u002Fplugins\u002Fdeveloper-essentials\u002Fskills\u002Fdebugging-strategies\u002FSKILL.md\n  upstream-commit: 4236bb91f8395b0435f1d8b8baf9e8e4c69a8620\n  original-name: debugging-strategies\n  packaged-by: AutoGPT\n  packaged-on: '2026-09-25'\n---\n\n> Packaging adaptation by AutoGPT, 2026-09-25. Original authorship and licence are retained. Changes are limited to the recorded name, metadata and local references; see ATTRIBUTION.md in this package.\n\n\n# Debugging Strategies\n\nTransform debugging from frustrating guesswork into systematic problem-solving with proven strategies, powerful tools, and methodical approaches.\n\n## When to Use This Skill\n\n- Tracking down elusive bugs\n- Investigating performance issues\n- Understanding unfamiliar codebases\n- Debugging production issues\n- Analyzing crash dumps and stack traces\n- Profiling application performance\n- Investigating memory leaks\n- Debugging distributed systems\n\n## Core Principles\n\n### 1. The Scientific Method\n\n**1. Observe**: What's the actual behavior?\n**2. Hypothesize**: What could be causing it?\n**3. Experiment**: Test your hypothesis\n**4. Analyze**: Did it prove\u002Fdisprove your theory?\n**5. Repeat**: Until you find the root cause\n\n### 2. Debugging Mindset\n\n**Don't Assume:**\n\n- \"It can't be X\" - Yes it can\n- \"I didn't change Y\" - Check anyway\n- \"It works on my machine\" - Find out why\n\n**Do:**\n\n- Reproduce consistently\n- Isolate the problem\n- Keep detailed notes\n- Question everything\n- Take breaks when stuck\n\n### 3. Rubber Duck Debugging\n\nExplain your code and problem out loud (to a rubber duck, colleague, or yourself). Often reveals the issue.\n\n## Systematic Debugging Process\n\n### Phase 1: Reproduce\n\n```markdown\n## Reproduction Checklist\n\n1. **Can you reproduce it?**\n   - Always? Sometimes? Randomly?\n   - Specific conditions needed?\n   - Can others reproduce it?\n\n2. **Create minimal reproduction**\n   - Simplify to smallest example\n   - Remove unrelated code\n   - Isolate the problem\n\n3. **Document steps**\n   - Write down exact steps\n   - Note environment details\n   - Capture error messages\n```\n\n### Phase 2: Gather Information\n\n```markdown\n## Information Collection\n\n1. **Error Messages**\n   - Full stack trace\n   - Error codes\n   - Console\u002Flog output\n\n2. **Environment**\n   - OS version\n   - Language\u002Fruntime version\n   - Dependencies versions\n   - Environment variables\n\n3. **Recent Changes**\n   - Git history\n   - Deployment timeline\n   - Configuration changes\n\n4. **Scope**\n   - Affects all users or specific ones?\n   - All browsers or specific ones?\n   - Production only or also dev?\n```\n\n### Phase 3: Form Hypothesis\n\n```markdown\n## Hypothesis Formation\n\nBased on gathered info, ask:\n\n1. **What changed?**\n   - Recent code changes\n   - Dependency updates\n   - Infrastructure changes\n\n2. **What's different?**\n   - Working vs broken environment\n   - Working vs broken user\n   - Before vs after\n\n3. **Where could this fail?**\n   - Input validation\n   - Business logic\n   - Data layer\n   - External services\n```\n\n### Phase 4: Test & Verify\n\n```markdown\n## Testing Strategies\n\n1. **Binary Search**\n   - Comment out half the code\n   - Narrow down problematic section\n   - Repeat until found\n\n2. **Add Logging**\n   - Strategic console.log\u002Fprint\n   - Track variable values\n   - Trace execution flow\n\n3. **Isolate Components**\n   - Test each piece separately\n   - Mock dependencies\n   - Remove complexity\n\n4. **Compare Working vs Broken**\n   - Diff configurations\n   - Diff environments\n   - Diff data\n```\n\n## Debugging Tools\n\n### JavaScript\u002FTypeScript Debugging\n\n```typescript\n\u002F\u002F Chrome DevTools Debugger\nfunction processOrder(order: Order) {\n  debugger; \u002F\u002F Execution pauses here\n\n  const total = calculateTotal(order);\n  console.log(\"Total:\", total);\n\n  \u002F\u002F Conditional breakpoint\n  if (order.items.length > 10) {\n    debugger; \u002F\u002F Only breaks if condition true\n  }\n\n  return total;\n}\n\n\u002F\u002F Console debugging techniques\nconsole.log(\"Value:\", value); \u002F\u002F Basic\nconsole.table(arrayOfObjects); \u002F\u002F Table format\nconsole.time(\"operation\");\n\u002F* code *\u002F console.timeEnd(\"operation\"); \u002F\u002F Timing\nconsole.trace(); \u002F\u002F Stack trace\nconsole.assert(value > 0, \"Value must be positive\"); \u002F\u002F Assertion\n\n\u002F\u002F Performance profiling\nperformance.mark(\"start-operation\");\n\u002F\u002F ... operation code\nperformance.mark(\"end-operation\");\nperformance.measure(\"operation\", \"start-operation\", \"end-operation\");\nconsole.log(performance.getEntriesByType(\"measure\"));\n```\n\n**VS Code Debugger Configuration:**\n\n```json\n\u002F\u002F .vscode\u002Flaunch.json\n{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Debug Program\",\n      \"program\": \"${workspaceFolder}\u002Fsrc\u002Findex.ts\",\n      \"preLaunchTask\": \"tsc: build - tsconfig.json\",\n      \"outFiles\": [\"${workspaceFolder}\u002Fdist\u002F**\u002F*.js\"],\n      \"skipFiles\": [\"\u003Cnode_internals>\u002F**\"]\n    },\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Debug Tests\",\n      \"program\": \"${workspaceFolder}\u002Fnode_modules\u002Fjest\u002Fbin\u002Fjest\",\n      \"args\": [\"--runInBand\", \"--no-cache\"],\n      \"console\": \"integratedTerminal\"\n    }\n  ]\n}\n```\n\n### Python Debugging\n\n```python\n# Built-in debugger (pdb)\nimport pdb\n\ndef calculate_total(items):\n    total = 0\n    pdb.set_trace()  # Debugger starts here\n\n    for item in items:\n        total += item.price * item.quantity\n\n    return total\n\n# Breakpoint (Python 3.7+)\ndef process_order(order):\n    breakpoint()  # More convenient than pdb.set_trace()\n    # ... code\n\n# Post-mortem debugging\ntry:\n    risky_operation()\nexcept Exception:\n    import pdb\n    pdb.post_mortem()  # Debug at exception point\n\n# IPython debugging (ipdb)\nfrom ipdb import set_trace\nset_trace()  # Better interface than pdb\n\n# Logging for debugging\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\nlogger = logging.getLogger(__name__)\n\ndef fetch_user(user_id):\n    logger.debug(f'Fetching user: {user_id}')\n    user = db.query(User).get(user_id)\n    logger.debug(f'Found user: {user}')\n    return user\n\n# Profile performance\nimport cProfile\nimport pstats\n\ncProfile.run('slow_function()', 'profile_stats')\nstats = pstats.Stats('profile_stats')\nstats.sort_stats('cumulative')\nstats.print_stats(10)  # Top 10 slowest\n```\n\n### Go Debugging\n\n```go\n\u002F\u002F Delve debugger\n\u002F\u002F Install: go install github.com\u002Fgo-delve\u002Fdelve\u002Fcmd\u002Fdlv@latest\n\u002F\u002F Run: dlv debug main.go\n\nimport (\n    \"fmt\"\n    \"runtime\"\n    \"runtime\u002Fdebug\"\n)\n\n\u002F\u002F Print stack trace\nfunc debugStack() {\n    debug.PrintStack()\n}\n\n\u002F\u002F Panic recovery with debugging\nfunc processRequest() {\n    defer func() {\n        if r := recover(); r != nil {\n            fmt.Println(\"Panic:\", r)\n            debug.PrintStack()\n        }\n    }()\n\n    \u002F\u002F ... code that might panic\n}\n\n\u002F\u002F Memory profiling\nimport _ \"net\u002Fhttp\u002Fpprof\"\n\u002F\u002F Visit http:\u002F\u002Flocalhost:6060\u002Fdebug\u002Fpprof\u002F\n\n\u002F\u002F CPU profiling\nimport (\n    \"os\"\n    \"runtime\u002Fpprof\"\n)\n\nf, _ := os.Create(\"cpu.prof\")\npprof.StartCPUProfile(f)\ndefer pprof.StopCPUProfile()\n\u002F\u002F ... code to profile\n```\n\n## Advanced Debugging Techniques\n\n### Technique 1: Binary Search Debugging\n\n```bash\n# Git bisect for finding regression\ngit bisect start\ngit bisect bad                    # Current commit is bad\ngit bisect good v1.0.0            # v1.0.0 was good\n\n# Git checks out middle commit\n# Test it, then:\ngit bisect good   # if it works\ngit bisect bad    # if it's broken\n\n# Continue until bug found\ngit bisect reset  # when done\n```\n\n### Technique 2: Differential Debugging\n\nCompare working vs broken:\n\n```markdown\n## What's Different?\n\n| Aspect       | Working     | Broken         |\n| ------------ | ----------- | -------------- |\n| Environment  | Development | Production     |\n| Node version | 18.16.0     | 18.15.0        |\n| Data         | Empty DB    | 1M records     |\n| User         | Admin       | Regular user   |\n| Browser      | Chrome      | Safari         |\n| Time         | During day  | After midnight |\n\nHypothesis: Time-based issue? Check timezone handling.\n```\n\n### Technique 3: Trace Debugging\n\n```typescript\n\u002F\u002F Function call tracing\nfunction trace(\n  target: any,\n  propertyKey: string,\n  descriptor: PropertyDescriptor,\n) {\n  const originalMethod = descriptor.value;\n\n  descriptor.value = function (...args: any[]) {\n    console.log(`Calling ${propertyKey} with args:`, args);\n    const result = originalMethod.apply(this, args);\n    console.log(`${propertyKey} returned:`, result);\n    return result;\n  };\n\n  return descriptor;\n}\n\nclass OrderService {\n  @trace\n  calculateTotal(items: Item[]): number {\n    return items.reduce((sum, item) => sum + item.price, 0);\n  }\n}\n```\n\n### Technique 4: Memory Leak Detection\n\n```typescript\n\u002F\u002F Chrome DevTools Memory Profiler\n\u002F\u002F 1. Take heap snapshot\n\u002F\u002F 2. Perform action\n\u002F\u002F 3. Take another snapshot\n\u002F\u002F 4. Compare snapshots\n\n\u002F\u002F Node.js memory debugging\nif (process.memoryUsage().heapUsed > 500 * 1024 * 1024) {\n  console.warn(\"High memory usage:\", process.memoryUsage());\n\n  \u002F\u002F Generate heap dump\n  require(\"v8\").writeHeapSnapshot();\n}\n\n\u002F\u002F Find memory leaks in tests\nlet beforeMemory: number;\n\nbeforeEach(() => {\n  beforeMemory = process.memoryUsage().heapUsed;\n});\n\nafterEach(() => {\n  const afterMemory = process.memoryUsage().heapUsed;\n  const diff = afterMemory - beforeMemory;\n\n  if (diff > 10 * 1024 * 1024) {\n    \u002F\u002F 10MB threshold\n    console.warn(`Possible memory leak: ${diff \u002F 1024 \u002F 1024}MB`);\n  }\n});\n```\n\n## Debugging Patterns by Issue Type\n\n### Pattern 1: Intermittent Bugs\n\n```markdown\n## Strategies for Flaky Bugs\n\n1. **Add extensive logging**\n   - Log timing information\n   - Log all state transitions\n   - Log external interactions\n\n2. **Look for race conditions**\n   - Concurrent access to shared state\n   - Async operations completing out of order\n   - Missing synchronization\n\n3. **Check timing dependencies**\n   - setTimeout\u002FsetInterval\n   - Promise resolution order\n   - Animation frame timing\n\n4. **Stress test**\n   - Run many times\n   - Vary timing\n   - Simulate load\n```\n\n### Pattern 2: Performance Issues\n\n```markdown\n## Performance Debugging\n\n1. **Profile first**\n   - Don't optimize blindly\n   - Measure before and after\n   - Find bottlenecks\n\n2. **Common culprits**\n   - N+1 queries\n   - Unnecessary re-renders\n   - Large data processing\n   - Synchronous I\u002FO\n\n3. **Tools**\n   - Browser DevTools Performance tab\n   - Lighthouse\n   - Python: cProfile, line_profiler\n   - Node: clinic.js, 0x\n```\n\n### Pattern 3: Production Bugs\n\n```markdown\n## Production Debugging\n\n1. **Gather evidence**\n   - Error tracking (Sentry, Bugsnag)\n   - Application logs\n   - User reports\n   - Metrics\u002Fmonitoring\n\n2. **Reproduce locally**\n   - Use production data (anonymized)\n   - Match environment\n   - Follow exact steps\n\n3. **Safe investigation**\n   - Don't change production\n   - Use feature flags\n   - Add monitoring\u002Flogging\n   - Test fixes in staging\n```\n\n## Best Practices\n\n1. **Reproduce First**: Can't fix what you can't reproduce\n2. **Isolate the Problem**: Remove complexity until minimal case\n3. **Read Error Messages**: They're usually helpful\n4. **Check Recent Changes**: Most bugs are recent\n5. **Use Version Control**: Git bisect, blame, history\n6. **Take Breaks**: Fresh eyes see better\n7. **Document Findings**: Help future you\n8. **Fix Root Cause**: Not just symptoms\n\n## Common Debugging Mistakes\n\n- **Making Multiple Changes**: Change one thing at a time\n- **Not Reading Error Messages**: Read the full stack trace\n- **Assuming It's Complex**: Often it's simple\n- **Debug Logging in Prod**: Remove before shipping\n- **Not Using Debugger**: console.log isn't always best\n- **Giving Up Too Soon**: Persistence pays off\n- **Not Testing the Fix**: Verify it actually works\n\n## Quick Debugging Checklist\n\n```markdown\n## When Stuck, Check:\n\n- [ ] Spelling errors (typos in variable names)\n- [ ] Case sensitivity (fileName vs filename)\n- [ ] Null\u002Fundefined values\n- [ ] Array index off-by-one\n- [ ] Async timing (race conditions)\n- [ ] Scope issues (closure, hoisting)\n- [ ] Type mismatches\n- [ ] Missing dependencies\n- [ ] Environment variables\n- [ ] File paths (absolute vs relative)\n- [ ] Cache issues (clear cache)\n- [ ] Stale data (refresh database)\n```\n","> Packaging adaptation by AutoGPT, 2026-09-25. Original authorship and licence are retained. Changes are limited to the recorded name, metadata and local references; see ATTRIBUTION.md in this package.\n\n\n# Debugging Strategies\n\nTransform debugging from frustrating guesswork into systematic problem-solving with proven strategies, powerful tools, and methodical approaches.\n\n## When to Use This Skill\n\n- Tracking down elusive bugs\n- Investigating performance issues\n- Understanding unfamiliar codebases\n- Debugging production issues\n- Analyzing crash dumps and stack traces\n- Profiling application performance\n- Investigating memory leaks\n- Debugging distributed systems\n\n## Core Principles\n\n### 1. The Scientific Method\n\n**1. Observe**: What's the actual behavior?\n**2. Hypothesize**: What could be causing it?\n**3. Experiment**: Test your hypothesis\n**4. Analyze**: Did it prove\u002Fdisprove your theory?\n**5. Repeat**: Until you find the root cause\n\n### 2. Debugging Mindset\n\n**Don't Assume:**\n\n- \"It can't be X\" - Yes it can\n- \"I didn't change Y\" - Check anyway\n- \"It works on my machine\" - Find out why\n\n**Do:**\n\n- Reproduce consistently\n- Isolate the problem\n- Keep detailed notes\n- Question everything\n- Take breaks when stuck\n\n### 3. Rubber Duck Debugging\n\nExplain your code and problem out loud (to a rubber duck, colleague, or yourself). Often reveals the issue.\n\n## Systematic Debugging Process\n\n### Phase 1: Reproduce\n\n```markdown\n## Reproduction Checklist\n\n1. **Can you reproduce it?**\n   - Always? Sometimes? Randomly?\n   - Specific conditions needed?\n   - Can others reproduce it?\n\n2. **Create minimal reproduction**\n   - Simplify to smallest example\n   - Remove unrelated code\n   - Isolate the problem\n\n3. **Document steps**\n   - Write down exact steps\n   - Note environment details\n   - Capture error messages\n```\n\n### Phase 2: Gather Information\n\n```markdown\n## Information Collection\n\n1. **Error Messages**\n   - Full stack trace\n   - Error codes\n   - Console\u002Flog output\n\n2. **Environment**\n   - OS version\n   - Language\u002Fruntime version\n   - Dependencies versions\n   - Environment variables\n\n3. **Recent Changes**\n   - Git history\n   - Deployment timeline\n   - Configuration changes\n\n4. **Scope**\n   - Affects all users or specific ones?\n   - All browsers or specific ones?\n   - Production only or also dev?\n```\n\n### Phase 3: Form Hypothesis\n\n```markdown\n## Hypothesis Formation\n\nBased on gathered info, ask:\n\n1. **What changed?**\n   - Recent code changes\n   - Dependency updates\n   - Infrastructure changes\n\n2. **What's different?**\n   - Working vs broken environment\n   - Working vs broken user\n   - Before vs after\n\n3. **Where could this fail?**\n   - Input validation\n   - Business logic\n   - Data layer\n   - External services\n```\n\n### Phase 4: Test & Verify\n\n```markdown\n## Testing Strategies\n\n1. **Binary Search**\n   - Comment out half the code\n   - Narrow down problematic section\n   - Repeat until found\n\n2. **Add Logging**\n   - Strategic console.log\u002Fprint\n   - Track variable values\n   - Trace execution flow\n\n3. **Isolate Components**\n   - Test each piece separately\n   - Mock dependencies\n   - Remove complexity\n\n4. **Compare Working vs Broken**\n   - Diff configurations\n   - Diff environments\n   - Diff data\n```\n\n## Debugging Tools\n\n### JavaScript\u002FTypeScript Debugging\n\n```typescript\n\u002F\u002F Chrome DevTools Debugger\nfunction processOrder(order: Order) {\n  debugger; \u002F\u002F Execution pauses here\n\n  const total = calculateTotal(order);\n  console.log(\"Total:\", total);\n\n  \u002F\u002F Conditional breakpoint\n  if (order.items.length > 10) {\n    debugger; \u002F\u002F Only breaks if condition true\n  }\n\n  return total;\n}\n\n\u002F\u002F Console debugging techniques\nconsole.log(\"Value:\", value); \u002F\u002F Basic\nconsole.table(arrayOfObjects); \u002F\u002F Table format\nconsole.time(\"operation\");\n\u002F* code *\u002F console.timeEnd(\"operation\"); \u002F\u002F Timing\nconsole.trace(); \u002F\u002F Stack trace\nconsole.assert(value > 0, \"Value must be positive\"); \u002F\u002F Assertion\n\n\u002F\u002F Performance profiling\nperformance.mark(\"start-operation\");\n\u002F\u002F ... operation code\nperformance.mark(\"end-operation\");\nperformance.measure(\"operation\", \"start-operation\", \"end-operation\");\nconsole.log(performance.getEntriesByType(\"measure\"));\n```\n\n**VS Code Debugger Configuration:**\n\n```json\n\u002F\u002F .vscode\u002Flaunch.json\n{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Debug Program\",\n      \"program\": \"${workspaceFolder}\u002Fsrc\u002Findex.ts\",\n      \"preLaunchTask\": \"tsc: build - tsconfig.json\",\n      \"outFiles\": [\"${workspaceFolder}\u002Fdist\u002F**\u002F*.js\"],\n      \"skipFiles\": [\"\u003Cnode_internals>\u002F**\"]\n    },\n    {\n      \"type\": \"node\",\n      \"request\": \"launch\",\n      \"name\": \"Debug Tests\",\n      \"program\": \"${workspaceFolder}\u002Fnode_modules\u002Fjest\u002Fbin\u002Fjest\",\n      \"args\": [\"--runInBand\", \"--no-cache\"],\n      \"console\": \"integratedTerminal\"\n    }\n  ]\n}\n```\n\n### Python Debugging\n\n```python\n# Built-in debugger (pdb)\nimport pdb\n\ndef calculate_total(items):\n    total = 0\n    pdb.set_trace()  # Debugger starts here\n\n    for item in items:\n        total += item.price * item.quantity\n\n    return total\n\n# Breakpoint (Python 3.7+)\ndef process_order(order):\n    breakpoint()  # More convenient than pdb.set_trace()\n    # ... code\n\n# Post-mortem debugging\ntry:\n    risky_operation()\nexcept Exception:\n    import pdb\n    pdb.post_mortem()  # Debug at exception point\n\n# IPython debugging (ipdb)\nfrom ipdb import set_trace\nset_trace()  # Better interface than pdb\n\n# Logging for debugging\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\nlogger = logging.getLogger(__name__)\n\ndef fetch_user(user_id):\n    logger.debug(f'Fetching user: {user_id}')\n    user = db.query(User).get(user_id)\n    logger.debug(f'Found user: {user}')\n    return user\n\n# Profile performance\nimport cProfile\nimport pstats\n\ncProfile.run('slow_function()', 'profile_stats')\nstats = pstats.Stats('profile_stats')\nstats.sort_stats('cumulative')\nstats.print_stats(10)  # Top 10 slowest\n```\n\n### Go Debugging\n\n```go\n\u002F\u002F Delve debugger\n\u002F\u002F Install: go install github.com\u002Fgo-delve\u002Fdelve\u002Fcmd\u002Fdlv@latest\n\u002F\u002F Run: dlv debug main.go\n\nimport (\n    \"fmt\"\n    \"runtime\"\n    \"runtime\u002Fdebug\"\n)\n\n\u002F\u002F Print stack trace\nfunc debugStack() {\n    debug.PrintStack()\n}\n\n\u002F\u002F Panic recovery with debugging\nfunc processRequest() {\n    defer func() {\n        if r := recover(); r != nil {\n            fmt.Println(\"Panic:\", r)\n            debug.PrintStack()\n        }\n    }()\n\n    \u002F\u002F ... code that might panic\n}\n\n\u002F\u002F Memory profiling\nimport _ \"net\u002Fhttp\u002Fpprof\"\n\u002F\u002F Visit http:\u002F\u002Flocalhost:6060\u002Fdebug\u002Fpprof\u002F\n\n\u002F\u002F CPU profiling\nimport (\n    \"os\"\n    \"runtime\u002Fpprof\"\n)\n\nf, _ := os.Create(\"cpu.prof\")\npprof.StartCPUProfile(f)\ndefer pprof.StopCPUProfile()\n\u002F\u002F ... code to profile\n```\n\n## Advanced Debugging Techniques\n\n### Technique 1: Binary Search Debugging\n\n```bash\n# Git bisect for finding regression\ngit bisect start\ngit bisect bad                    # Current commit is bad\ngit bisect good v1.0.0            # v1.0.0 was good\n\n# Git checks out middle commit\n# Test it, then:\ngit bisect good   # if it works\ngit bisect bad    # if it's broken\n\n# Continue until bug found\ngit bisect reset  # when done\n```\n\n### Technique 2: Differential Debugging\n\nCompare working vs broken:\n\n```markdown\n## What's Different?\n\n| Aspect       | Working     | Broken         |\n| ------------ | ----------- | -------------- |\n| Environment  | Development | Production     |\n| Node version | 18.16.0     | 18.15.0        |\n| Data         | Empty DB    | 1M records     |\n| User         | Admin       | Regular user   |\n| Browser      | Chrome      | Safari         |\n| Time         | During day  | After midnight |\n\nHypothesis: Time-based issue? Check timezone handling.\n```\n\n### Technique 3: Trace Debugging\n\n```typescript\n\u002F\u002F Function call tracing\nfunction trace(\n  target: any,\n  propertyKey: string,\n  descriptor: PropertyDescriptor,\n) {\n  const originalMethod = descriptor.value;\n\n  descriptor.value = function (...args: any[]) {\n    console.log(`Calling ${propertyKey} with args:`, args);\n    const result = originalMethod.apply(this, args);\n    console.log(`${propertyKey} returned:`, result);\n    return result;\n  };\n\n  return descriptor;\n}\n\nclass OrderService {\n  @trace\n  calculateTotal(items: Item[]): number {\n    return items.reduce((sum, item) => sum + item.price, 0);\n  }\n}\n```\n\n### Technique 4: Memory Leak Detection\n\n```typescript\n\u002F\u002F Chrome DevTools Memory Profiler\n\u002F\u002F 1. Take heap snapshot\n\u002F\u002F 2. Perform action\n\u002F\u002F 3. Take another snapshot\n\u002F\u002F 4. Compare snapshots\n\n\u002F\u002F Node.js memory debugging\nif (process.memoryUsage().heapUsed > 500 * 1024 * 1024) {\n  console.warn(\"High memory usage:\", process.memoryUsage());\n\n  \u002F\u002F Generate heap dump\n  require(\"v8\").writeHeapSnapshot();\n}\n\n\u002F\u002F Find memory leaks in tests\nlet beforeMemory: number;\n\nbeforeEach(() => {\n  beforeMemory = process.memoryUsage().heapUsed;\n});\n\nafterEach(() => {\n  const afterMemory = process.memoryUsage().heapUsed;\n  const diff = afterMemory - beforeMemory;\n\n  if (diff > 10 * 1024 * 1024) {\n    \u002F\u002F 10MB threshold\n    console.warn(`Possible memory leak: ${diff \u002F 1024 \u002F 1024}MB`);\n  }\n});\n```\n\n## Debugging Patterns by Issue Type\n\n### Pattern 1: Intermittent Bugs\n\n```markdown\n## Strategies for Flaky Bugs\n\n1. **Add extensive logging**\n   - Log timing information\n   - Log all state transitions\n   - Log external interactions\n\n2. **Look for race conditions**\n   - Concurrent access to shared state\n   - Async operations completing out of order\n   - Missing synchronization\n\n3. **Check timing dependencies**\n   - setTimeout\u002FsetInterval\n   - Promise resolution order\n   - Animation frame timing\n\n4. **Stress test**\n   - Run many times\n   - Vary timing\n   - Simulate load\n```\n\n### Pattern 2: Performance Issues\n\n```markdown\n## Performance Debugging\n\n1. **Profile first**\n   - Don't optimize blindly\n   - Measure before and after\n   - Find bottlenecks\n\n2. **Common culprits**\n   - N+1 queries\n   - Unnecessary re-renders\n   - Large data processing\n   - Synchronous I\u002FO\n\n3. **Tools**\n   - Browser DevTools Performance tab\n   - Lighthouse\n   - Python: cProfile, line_profiler\n   - Node: clinic.js, 0x\n```\n\n### Pattern 3: Production Bugs\n\n```markdown\n## Production Debugging\n\n1. **Gather evidence**\n   - Error tracking (Sentry, Bugsnag)\n   - Application logs\n   - User reports\n   - Metrics\u002Fmonitoring\n\n2. **Reproduce locally**\n   - Use production data (anonymized)\n   - Match environment\n   - Follow exact steps\n\n3. **Safe investigation**\n   - Don't change production\n   - Use feature flags\n   - Add monitoring\u002Flogging\n   - Test fixes in staging\n```\n\n## Best Practices\n\n1. **Reproduce First**: Can't fix what you can't reproduce\n2. **Isolate the Problem**: Remove complexity until minimal case\n3. **Read Error Messages**: They're usually helpful\n4. **Check Recent Changes**: Most bugs are recent\n5. **Use Version Control**: Git bisect, blame, history\n6. **Take Breaks**: Fresh eyes see better\n7. **Document Findings**: Help future you\n8. **Fix Root Cause**: Not just symptoms\n\n## Common Debugging Mistakes\n\n- **Making Multiple Changes**: Change one thing at a time\n- **Not Reading Error Messages**: Read the full stack trace\n- **Assuming It's Complex**: Often it's simple\n- **Debug Logging in Prod**: Remove before shipping\n- **Not Using Debugger**: console.log isn't always best\n- **Giving Up Too Soon**: Persistence pays off\n- **Not Testing the Fix**: Verify it actually works\n\n## Quick Debugging Checklist\n\n```markdown\n## When Stuck, Check:\n\n- [ ] Spelling errors (typos in variable names)\n- [ ] Case sensitivity (fileName vs filename)\n- [ ] Null\u002Fundefined values\n- [ ] Array index off-by-one\n- [ ] Async timing (race conditions)\n- [ ] Scope issues (closure, hoisting)\n- [ ] Type mismatches\n- [ ] Missing dependencies\n- [ ] Environment variables\n- [ ] File paths (absolute vs relative)\n- [ ] Cache issues (clear cache)\n- [ ] Stale data (refresh database)\n```\n",{"name":5,"license":15,"metadata":34,"description":7},{"author":35,"source":36,"source_url":37,"packaged-by":12,"packaged-on":38,"original-name":39,"upstream-commit":40},"Seth Hobson","wshobson\u002Fagents\u002Fplugins\u002Fdeveloper-essentials\u002Fskills\u002Fdebugging-strategies","https:\u002F\u002Fgithub.com\u002Fwshobson\u002Fagents\u002Fblob\u002F4236bb91f8395b0435f1d8b8baf9e8e4c69a8620\u002Fplugins\u002Fdeveloper-essentials\u002Fskills\u002Fdebugging-strategies\u002FSKILL.md","2026-09-25","debugging-strategies","4236bb91f8395b0435f1d8b8baf9e8e4c69a8620","main","7ed3b73314d5186120e8d4006febfd7e1c92cf08","skills\u002Fsoftware-debugging",0,"https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas","agpt.co","2026-11-10 22:38:50",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add Significant-Gravitas\u002Fskills-catalog --skill software-debugging",{"tool":55,"command":56},"bunx","bunx skills add Significant-Gravitas\u002Fskills-catalog --skill software-debugging",{"tool":58,"command":59},"pnpm","pnpm dlx skills add Significant-Gravitas\u002Fskills-catalog --skill software-debugging","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fsoftware-debugging\u002FSKILL.md",true,[63,69,73,77],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"agents\u002Fopenai.yaml","REFERENCE","参考文档",96,"https:\u002F\u002Fgithub.com\u002Fmingster\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwizard\u002Fagents\u002Fopenai.yaml",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"ATTRIBUTION.md",1355,"https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fsoftware-debugging\u002FATTRIBUTION.md",{"path":74,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":16},"LICENSE","许可证",1068,{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"template.sh","SCRIPT","脚本",9498,"https:\u002F\u002Fgithub.com\u002Fmingster\u002Fdotfiles\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwizard\u002Ftemplate.sh",[84,96,123,133,147,165],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":88,"licenseFileUrl":89,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":29},"01M6AD3S89TGF74S7MK4K5CGC7","workplace-memory-management","Two-tier memory system that makes Claude a true workplace collaborator. Decodes shorthand, acronyms, nicknames, and internal language so Claude understands requests like a colleague would. CLAUDE.md for working memory, memory\u002F directory for the full knowledge base.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fworkplace-memory-management\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fworkplace-memory-management\u002FSKILL.md",[],[93,94,28,27,22,95],"workplace memory management","memory","directory",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":100,"sourceHtmlUrl":101,"categories":102,"keywords":116,"publishedAt":29},"01M6AD3F5X5DYW1BABD49BQKP8","website-seo-audit","Audit a website, investigate its real search opportunities, and deliver a short data-backed report on the few changes most likely to grow organic traffic that converts.","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fwebsite-seo-audit\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fwebsite-seo-audit\u002FSKILL.md",[103,108,111],{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000019","营销推广","SCENARIO","使用场景",{"categoryNo":109,"categoryName":110,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":112,"categoryName":113,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000035","市场营销","PROFESSION","适用职业",[117,118,119,22,28,27,120,121,122],"website seo audit","audit","website","search","report","plugin",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":127,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":29},"01M6AD32RYMK03P50DM0T184NJ","verification-before-completion","Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fverification-before-completion\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fverification-before-completion\u002FSKILL.md",[],[131,132,27,22],"verification before completion","verification",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":88,"licenseFileUrl":137,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":29},"01M6AD2WSQG7BGPXA7XP4DFZX8","vendor-evaluation","Evaluate a vendor — cost analysis, risk assessment, and recommendation. Use when reviewing a new vendor proposal, deciding whether to renew or replace a contract, comparing two vendors side-by-side, or building a TCO breakdown and negotiation points before procurement sign-off.","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fvendor-evaluation\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fvendor-evaluation\u002FSKILL.md",[],[141,142,28,27,143,144,145,22,146],"vendor evaluation","negotiation","assessment","risk assessment","cost analysis","review",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":88,"licenseFileUrl":151,"sourceHtmlUrl":152,"categories":153,"keywords":160,"publishedAt":29},"01M6AD2RBT6004C07RZRDSTA52","vendor-contract-status","Check the status of existing agreements with a vendor across all connected systems — CLM, CRM, email, and document storage — with gap analysis and upcoming deadlines. Use when onboarding or renewing a vendor, when you need a consolidated view of what's signed and what's missing (MSA, DPA, SOW), or when checking for approaching expirations and surviving obligations.","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fvendor-contract-status\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fvendor-contract-status\u002FSKILL.md",[154,157],{"categoryNo":155,"categoryName":156,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":158,"categoryName":159,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000037","律师与法务",[161,162,22,163,28,164,27],"vendor contract status","status","storage","onboarding",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":169,"sourceHtmlUrl":170,"categories":171,"keywords":175,"publishedAt":29},"01M6AD2KPNXN5CNS3CA4FRWT97","user-cohort-analysis","Perform cohort analysis on user engagement data — retention curves, feature adoption trends, and segment-level insights. Use when analyzing user retention by cohort, studying feature adoption over time, investigating churn patterns, or identifying engagement trends.","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fuser-cohort-analysis\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FSignificant-Gravitas\u002Fskills-catalog\u002Fblob\u002Fmain\u002Fskills\u002Fuser-cohort-analysis\u002FSKILL.md",[172],{"categoryNo":173,"categoryName":174,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000033","数据分析师",[176,177,27,22],"user cohort analysis","analytics"]