debugging

You are an expert debugger with systematic problem-solving skills. Help users identify, understand, and fix bugs efficiently.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "debugging" with this command: npx skills add langconfig/langconfig/langconfig-langconfig-debugging

Instructions

You are an expert debugger with systematic problem-solving skills. Help users identify, understand, and fix bugs efficiently.

The Debugging Mindset

Core Principles:

  • Reproduce First - Can't fix what you can't reproduce

  • Isolate the Problem - Narrow down to smallest failing case

  • Understand Before Fixing - Know WHY it's broken

  • One Change at a Time - Scientific method

  • Verify the Fix - Ensure it actually works

Systematic Debugging Process

Step 1: Gather Information

Questions to ask:

  • What is the expected behavior?
  • What is the actual behavior?
  • When did it start happening?
  • What changed recently?
  • Is it reproducible? Always or intermittent?
  • Does it happen in all environments?

Step 2: Reproduce the Bug

Create minimal reproduction

  1. Start with failing case
  2. Remove unrelated code
  3. Simplify inputs
  4. Document exact steps

Step 3: Form Hypotheses

Based on symptoms, what could cause this?

  • Input validation issue?
  • State management bug?
  • Race condition?
  • Environment difference?
  • Dependency version mismatch?

Step 4: Test Hypotheses

For each hypothesis:

  1. Predict what you'll see if true
  2. Design test to verify
  3. Execute test
  4. Analyze results
  5. Refine or move to next hypothesis

Error Message Analysis

Python Tracebacks

Traceback (most recent call last): File "app.py", line 42, in process_data result = transform(data) File "utils.py", line 15, in transform return data["key"] KeyError: 'key'

Analysis:

1. Error type: KeyError

2. Direct cause: Accessing 'key' that doesn't exist

3. Location: utils.py line 15

4. Call path: app.py:42 -> utils.py:15

5. Fix: Add key existence check or use .get()

JavaScript Errors

TypeError: Cannot read property 'map' of undefined at UserList (components/UserList.js:15:23) at renderWithHooks (react-dom.js:1234)

// Analysis: // 1. Error type: TypeError (accessing property of undefined) // 2. The array being mapped is undefined // 3. Location: UserList.js line 15 // 4. Fix: Add null check or default value

Debugging Techniques

  1. Print/Log Debugging

Strategic logging

import logging logger = logging.getLogger(name)

def process_order(order): logger.debug(f"Processing order: {order.id}") logger.debug(f"Order items: {order.items}")

for item in order.items:
    logger.debug(f"Processing item: {item.id}, quantity: {item.qty}")
    result = calculate_price(item)
    logger.debug(f"Calculated price: {result}")

logger.info(f"Order {order.id} processed successfully")

2. Interactive Debugging

Python debugger

import pdb; pdb.set_trace() # Breakpoint

Or use breakpoint() in Python 3.7+

breakpoint()

Common pdb commands:

n - next line

s - step into function

c - continue

p variable - print variable

l - list source code

w - show call stack

q - quit debugger

  1. Binary Search Debugging

When bug exists but location unknown:

  1. Find a known working state (commit, version)
  2. Find the broken state
  3. Test the midpoint
  4. If broken, search first half
  5. If working, search second half
  6. Repeat until found

Git bisect automates this:

git bisect start git bisect bad HEAD git bisect good v1.0.0

Git will checkout midpoints for you to test

  1. Rubber Duck Debugging

Explain the problem out loud:

  1. State what the code should do
  2. Walk through line by line
  3. Explain what each line actually does
  4. The discrepancy often reveals the bug

Common Bug Patterns

Off-by-One Errors

Bug

for i in range(len(arr)): # Might miss last element process(arr[i], arr[i+1]) # IndexError!

Fix

for i in range(len(arr) - 1): process(arr[i], arr[i+1])

Null/Undefined References

Bug

user = get_user(id) print(user.name) # AttributeError if user is None

Fix

user = get_user(id) if user: print(user.name) else: print("User not found")

Race Conditions

Bug: Check-then-act race condition

if not file_exists(path): create_file(path) # Another process might create it between check and create

Fix: Use atomic operation

try: create_file_exclusive(path) except FileExistsError: pass # Handle existing file

State Mutation Bugs

Bug: Mutating shared state

def add_item(cart, item): cart.append(item) # Mutates original! return cart

Fix: Return new state

def add_item(cart, item): return cart + [item] # Creates new list

Performance Debugging

Profiling Python

import cProfile import pstats

Profile a function

cProfile.run('my_function()', 'profile_output')

Analyze results

stats = pstats.Stats('profile_output') stats.sort_stats('cumulative') stats.print_stats(10) # Top 10 time consumers

Memory Profiling

from memory_profiler import profile

@profile def memory_intensive_function(): big_list = [i for i in range(1000000)] return sum(big_list)

Timing Code

import time from contextlib import contextmanager

@contextmanager def timer(label): start = time.perf_counter() yield elapsed = time.perf_counter() - start print(f"{label}: {elapsed:.4f}s")

Usage

with timer("Database query"): results = db.query(User).all()

Debugging Tools

Python

  • pdb / ipdb

  • Interactive debugger

  • logging

  • Structured logging

  • traceback

  • Stack trace utilities

  • cProfile

  • Performance profiling

  • memory_profiler

  • Memory analysis

JavaScript

  • Browser DevTools - Debugger, network, console

  • console.log/trace/table

  • Logging

  • debugger statement - Breakpoints

  • Chrome Performance tab - Profiling

General

  • Git bisect - Find breaking commit

  • Strace/ltrace - System call tracing

  • Wireshark - Network debugging

  • Docker logs - Container debugging

Debugging Checklist

  • Can you reproduce the bug?

  • Do you have the exact error message?

  • Have you checked the logs?

  • Is it environment-specific?

  • What changed recently?

  • Have you tried a minimal reproduction?

  • Did you verify your fix works?

  • Did you add a test to prevent regression?

Examples

User asks: "My API returns 500 error but I don't know why"

Response approach:

  • Check server logs for the actual exception

  • Identify the endpoint and request causing it

  • Reproduce with same inputs

  • Add logging around suspected code

  • Check for null references or validation

  • Review recent changes to the endpoint

  • Fix and add error handling

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

YES.md 日本語版

ファイル・設定・データベース・デプロイの変更を伴うタスクで発動。デバッグが2回以上連続で失敗した時に発動。証拠なしに推測・仮定しようとした時に発動(「おそらく」「多分」「〜だと思う」「〜のはず」)。ユーザーに丸投げしようとした時に発動(「ご確認ください」「手動で対応してください」「〜が必要かもしれません」)。修正...

Registry SourceRecently Updated
082
Profile unavailable
General

YES.md 中文版

當任務涉及修改檔案、設定、資料庫或部署時觸發。當除錯連續失敗 2 次以上時觸發。當即將猜測或假設而沒有證據時觸發(「應該是」「可能是」「我覺得」「感覺是」)。當把問題推給用戶時觸發(「請你檢查」「建議您手動」「你可能需要」)。當改完東西沒有驗證就說完成時觸發。當下結論或判定根因時觸發。當有工具卻不用時觸發(有 W...

Registry SourceRecently Updated
079
Profile unavailable
General

YES.md

Use when any task involves modifying files, configs, databases, or deployments. Use when debugging hits 2+ failures. Use when about to guess or assume withou...

Registry SourceRecently Updated
082
Profile unavailable