技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
debugging【数据与研究】Systematically debug code issues using proven methodologies. Use when encountering errors, unexpected behavior, or performance problems. Handles error analysis, root cause identification, debugging strategies, and fix verification.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Collect all relevant context about the issue:
Error details:
Environment:
# Check recent changes
git log --oneline -10
git diff HEAD~5
# Check dependency versions
npm list --depth=0 # Node.js
pip freeze # Python
Create a minimal, reproducible example:
# Bad: Vague description
"The function sometimes fails"
# Good: Specific reproduction steps
"""
1. Call process_data() with input: {"id": None}
2. Error occurs: TypeError at line 45
3. Expected: Return empty dict
4. Actual: Raises exception
"""
# Minimal reproduction
def test_reproduce_bug():
result = process_data({"id": None}) # Fails here
assert result == {}
Use binary search debugging to narrow down the issue:
Print/Log debugging:
def problematic_function(data):
print(f"[DEBUG] Input: {data}") # Entry point
result = step_one(data)
print(f"[DEBUG] After step_one: {result}")
result = step_two(result)
print(f"[DEBUG] After step_two: {result}") # Issue here?
return step_three(result)
Divide and conquer:
# Comment out half the code
# If error persists: bug is in remaining half
# If error gone: bug is in commented half
# Repeat until isolated
Common bug patterns and solutions:
| Pattern | Symptom | Solution |
|---|---|---|
| Off-by-one | Index out of bounds | Check loop bounds |
| Null reference | NullPointerException | Add null checks |
| Race condition | Intermittent failures | Add synchronization |
| Memory leak | Gradual slowdown | Check resource cleanup |
| Type mismatch | Unexpected behavior | Validate types |
Questions to ask:
Apply the fix with proper verification:
# Before: Bug
def get_user(user_id):
return users[user_id] # KeyError if not found
# After: Fix with proper handling
def get_user(user_id):
if user_id not in users:
return None # Or raise custom exception
return users[user_id]
Fix checklist:
Ensure the fix works and prevent regression:
# Add test for the specific bug
def test_bug_fix_issue_123():
"""Regression test for issue #123: KeyError on missing user"""
result = get_user("nonexistent_id")
assert result is None # Should not raise
# Add edge case tests
@pytest.mark.parametrize("input,expected", [
(None, None),
("", None),
("valid_id", {"name": "User"}),
])
def test_get_user_edge_cases(input, expected):
assert get_user(input) == expected
Error:
TypeError: cannot unpack non-iterable NoneType object
File "app.py", line 25, in process
name, email = get_user_info(user_id)
Analysis:
# Problem: get_user_info returns None when user not found
def get_user_info(user_id):
user = db.find_user(user_id)
if user:
return user.name, user.email
# Missing: return None case!
# Fix: Handle None case
def get_user_info(user_id):
user = db.find_user(user_id)
if user:
return user.name, user.email
return None, None # Or raise UserNotFoundError
Symptom: Test passes locally, fails in CI intermittently
Analysis:
# Problem: Shared state without synchronization
class Counter:
def __init__(self):
self.value = 0
def increment(self):
self.value += 1 # Not atomic!
# Fix: Add thread safety
import threading
class Counter:
def __init__(self):
self.value = 0
self._lock = threading.Lock()
def increment(self):
with self._lock:
self.value += 1
Tool: Use memory profiler
from memory_profiler import profile
@profile
def process_large_data():
results = []
for item in large_dataset:
results.append(transform(item)) # Memory grows
return results
# Fix: Use generator for large datasets
def process_large_data():
for item in large_dataset:
yield transform(item) # Memory efficient
| Language | Debugger | Profiler |
|---|---|---|
| Python | pdb, ipdb | cProfile, memory_profiler |
| JavaScript | Chrome DevTools | Performance tab |
| Java | IntelliJ Debugger | JProfiler, VisualVM |
| Go | Delve | pprof |
| Rust | rust-gdb | cargo-flamegraph |