debugging
0
总安装量
1
周安装量
安装命令
npx skills add https://github.com/youngger9765/career_ios_backend --skill debugging
Agent 安装分布
amp
1
cline
1
opencode
1
cursor
1
continue
1
kimi-cli
1
Skill 文档
Debugging – èªä¸»è¯æåä¿®å¤
Purpose: 让 Agent èªå·±å³å®è¯ææ¹æ³ï¼èééµå¾ªåºå®æ¥éª¤
AMP Principle: “åè¯å®ãä½ æ³çè§£ä»ä¹ãï¼èéãæä¹æµè¯ã”
æ ¸å¿æç»´
ð§ æ¬å°æ¸¬è©¦åªå åå (2026-01-08 æè¨)
éå° Bug æï¼
â ä¸è¦çé¨ç½²å¾æ¸¬è©¦
â ä¸è¦åªæ¸¬ä¸æ¬¡å°±ä»¥çºå°äº
â ä¸è¦ç¨ workaround ç¹éåé¡
â
å
寫æ¬å°æ¸¬è©¦è
³æ¬
â
ä¾å測試 3-5 次è§å¯è®ç°
â
ç¢ºèª root cause åä¿®
â
ä¿®å®å測 3+ 次確èª
æè¨ä¾æº: Quick Feedback æªæ· bug
- ç¨ staging æ¸¬è©¦å¤ªæ ¢
- ç¨æ¶èªªãä½ ä¸è¦çé¨ç½²ï¼ä½ å¨ local 測試ï¼ï¼è· debugï¼ä¾å夿¬¡ï¼ï¼ã
- æ¬å°æ¸¬ 10 æ¬¡ææ¾å° max_tokens åé¡
â æ§æ¹å¼ï¼åºå®æ¥éª¤ï¼
第1æ¥: è¿è¡æµè¯
第2æ¥: æ£æ¥æ¥å¿
第3æ¥: æ·»å print
第4æ¥: éç°é误
第5æ¥: ä¿®å¤
â æ°æ¹å¼ï¼èªä¸»è¯æï¼
é®èªå·±:
- ææ³çè§£ä»ä¹ï¼
- éè¦ä»ä¹ä¿¡æ¯æ¥è¯æï¼
- æå¿«çæ¹æ³æ¯ä»ä¹ï¼
ç¶å:
- èªå·±åè¯æèæ¬
- æ§è¡å¹¶åæç»æ
- è¿ä»£ç´å°æ¾å°æ ¹å
- ç¨å®å é¤ä¸´æ¶å·¥å
·
è¯ææ¨¡å¼ç¤ºä¾
Pattern 1: å临æ¶è¯æèæ¬
åºæ¯: API è¿å 500 é误
ä¸è¦: éµå¾ªåºå®æ¥éª¤
åºè¯¥:
# èªå·±å临æ¶è¯æèæ¬
cat > /tmp/debug_api.sh << 'EOF'
#!/bin/bash
# Create logs directory
mkdir -p logs
rm -f logs/*.log
# Run API with verbose logging
export DEBUG=true
export LOG_LEVEL=DEBUG
cd /Users/young/project/career_ios_backend
poetry run uvicorn app.main:app \
--reload \
--log-level debug \
> logs/api.log 2>&1 &
API_PID=$!
# Wait for startup
sleep 2
# Test the failing endpoint
curl -X POST http://localhost:8000/api/sessions \
-H "Content-Type: application/json" \
-d '{"name": "test"}' \
-v > logs/curl.log 2>&1
# Analyze logs
echo "=== Errors ==="
grep -i "error\|exception" logs/api.log
echo "=== Response ==="
cat logs/curl.log
# Cleanup
kill $API_PID
EOF
chmod +x /tmp/debug_api.sh
/tmp/debug_api.sh
# ç¨å®å°±å
rm /tmp/debug_api.sh
Pattern 2: å¨ææ·»å æ¥å¿
åºæ¯: ä¸ç¡®å®åªéåºé
ä¸è¦: é¢è®¾æ·»å æ¥å¿çä½ç½®
åºè¯¥:
# TEMP: Add detailed logging
import logging
logging.basicConfig(level=logging.DEBUG)
# 卿çç彿°æ·»å
def problematic_function(input_data):
logger.debug(f"Input: {input_data}")
logger.debug(f"Processing...")
result = some_operation()
logger.debug(f"Result: {result}")
return result
# è¿è¡ãåæãç¶åç§»é¤æ¥å¿
Pattern 3: æ°æ®åºè¯æ
åºæ¯: æ°æ®ä¸ä¸è´
ä¸è¦: æå¨æ¥è¯¢
åºè¯¥:
# å临æ¶åæèæ¬
cat > /tmp/analyze_db.py << 'EOF'
from sqlalchemy import create_engine, text
import os
import sys
# Add project root to path
sys.path.insert(0, '/Users/young/project/career_ios_backend')
from app.core.config import settings
engine = create_engine(settings.DATABASE_URL)
queries = {
"orphaned_sessions": """
SELECT s.id, s.name, s.client_id
FROM sessions s
LEFT JOIN clients c ON s.client_id = c.id
WHERE c.id IS NULL
""",
"duplicate_codes": """
SELECT client_code, COUNT(*)
FROM clients
GROUP BY client_code
HAVING COUNT(*) > 1
""",
"invalid_timestamps": """
SELECT * FROM sessions
WHERE created_at > updated_at
"""
}
for name, query in queries.items():
print(f"\n=== {name} ===")
result = engine.execute(text(query))
for row in result:
print(row)
EOF
cd /Users/young/project/career_ios_backend
poetry run python /tmp/analyze_db.py
rm /tmp/analyze_db.py
è¯ææç»´æµç¨
éå° Bug
â
é®: "æéè¦çè§£ä»ä¹ï¼"
- é误åçå¨åªä¸å±ï¼(API/Service/DB)
- è¾å
¥æ°æ®æ¯ä»ä¹ï¼
- 颿 vs å®é
è¾åºï¼
â
é®: "æå¿«çéªè¯æ¹æ³æ¯ä»ä¹ï¼"
- å临æ¶èæ¬ï¼
- æ·»å æ¥å¿ï¼
- ç´æ¥æµè¯ SQLï¼
â
æ§è¡è¯æ
- ä¸è¦æ
å¿ä»£ç è´¨é
- ä¸è¦è¿åº¦å·¥ç¨å
- å¿«éè¿ä»£
â
æ¾å°æ ¹å
â
ä¿®å¤
â
æ¸
ç临æ¶å·¥å
·
- å é¤ä¸´æ¶èæ¬
- ç§»é¤è°è¯æ¥å¿
- æ¢å¤æ£å¸¸ä»£ç
å¿«éè¯æå·¥å ·ç®±
1. HTTP 请æ±è¯æ
# è¯¦ç»æ¥ç HTTP 交äº
curl -v http://localhost:8000/api/endpoint
# æ·»å timing ä¿¡æ¯
curl -w "Time: %{time_total}s\n" http://localhost:8000/api/endpoint
# ä¿åååºè¯¦æ
curl -v http://localhost:8000/api/endpoint > /tmp/response.log 2>&1
2. Python 交äºå¼è°è¯
# 卿ççå°æ¹æ·»å æç¹
import pdb; pdb.set_trace()
# æä½¿ç¨ breakpoint() (Python 3.7+)
breakpoint()
3. æ°æ®åºå®æ¶æ¥è¯¢
# PostgreSQL
cd /Users/young/project/career_ios_backend
poetry run python -c "
from app.core.config import settings
import psycopg2
conn = psycopg2.connect(settings.DATABASE_URL)
cur = conn.cursor()
cur.execute('SELECT * FROM sessions LIMIT 5')
print(cur.fetchall())
"
4. æ¥å¿å®æ¶çæ§
# 宿¶æ¥çæ¥å¿
tail -f /Users/young/project/career_ios_backend/logs/app.log | grep -i error
# è¿æ»¤ç¹å®å
³é®è¯
tail -f /Users/young/project/career_ios_backend/logs/app.log | grep "session\|client"
AMP åååºç¨
Graham çä¾å:
“Agent èªå·±åäºä¸æ´ä¸ª bash èæ¬: å»ºç« logs ç®å½ãæ¯æ¬¡æ§è¡åæ¸ ç©ºã设ç¯å¢åæ°ãæè¾åºåå ¥ log æ¡£ãç¨ grep æ¾åºå¤±è´¥çå°æ¹ãè¿ä¸ª script 䏿¯äººè¦æ±çï¼æ¯ Agent èªå·±å¤æéè¦è产ççã”
æä»¬åºè¯¥:
- 让 Agent èªå·±å³å®éè¦ä»ä¹å·¥å ·
- é¼å±ä¸´æ¶èæ¬å䏿¬¡æ§å·¥å ·
- ç¨å®å°±å ï¼ä¸è¦ä¿ç
- ä¸è¦é¢è®¾åºå®æµç¨
IMPORTANT
- No Fixed Checklist – æ¯ä¸ª bug é½ä¸å
- Think, Don’t Follow – çè§£é®é¢ï¼èªä¸»å³ç
- Temporary is OK – è¯æèæ¬å¯ä»¥å¾ä¸
- Clean Up After – ä¿®å¤åå é¤ä¸´æ¶å·¥å ·
Version: 2.0 (Self-Diagnostic refactor) Size: ~230 lines Philosophy: Think > Follow