by supercent-io
是否在为难以捉摸的bug和运行时错误而烦恼?本技能提供经过验证的调试方法,帮助您识别根本原因、隔离问题并实施经过验证的修复。
1. 打开 Claude 聊天界面
2. 点击下方 "📋 复制" 按钮
3. 粘贴到 Claude 聊天框中并发送
4. 输入 "使用 debugging 技能" 开始使用
=== debugging 技能 === 作者: supercent-io 描述: 是否在为难以捉摸的bug和运行时错误而烦恼?本技能提供经过验证的调试方法,帮助您识别根本原因、隔离问题并实施经过验证的修复。 使用方法: 1. 调用技能: "使用 debugging 技能" 2. 提供相关信息: 根据技能要求提供必要参数 3. 查看结果: 技能会返回处理结果 示例: "使用 debugging 技能,帮我分析一下这段代码"
这种方法适用于所有 Claude 用户,不需要安装额外工具。
coding
safe
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 |
View Count
0
Download Count
0
Favorite Count
0
Quality Score
74