Przejdź do głównej zawartości

Przepływy debugowania

Przekształć debugowanie z godzin frustracji w minuty systematycznego rozwiązywania problemów. Naucz się przepływów debugowania wspomaganych przez AI, które pomagają identyfikować, izolować i naprawiać błędy szybciej niż kiedykolwiek wcześniej.

Tradycyjne debugowanie to często:

  • Czasochłonny proces prób i błędów
  • Ograniczone przez ludzkie rozpoznawanie wzorców
  • Zależne od doświadczenia developera
  • Wyczerpujące psychicznie

Debugowanie wspomagane przez AI to:

  • Systematyczne i wyczerpujące - AI sprawdza wzorce, które możesz przegapić
  • Uczenie się z milionów błędów - Rozpoznaje częste problemy natychmiast
  • Niezmordowane - Utrzymuje koncentrację przez złożone sesje debugowania
  • Współpracujące - Jak posiadanie eksperta debuggera w programowaniu w parze

Wpływ: Zmniejsz czas debugowania o 40-70% znajdując przyczyny źródłowe bardziej niezawodnie.

Strategiczne logowanie

AI umieszcza optymalne logi debugowania automatycznie

Analiza przyczyn źródłowych

Systematyczne podejście do znajdowania źródeł błędów

Rozpoznawanie wzorców

AI identyfikuje podobne błędy i rozwiązania

Walidacja poprawek

Upewnij się, że poprawki nie wprowadzają nowych błędów

  • Błąd występuje niespójnie
  • Złożone problemy z przepływem danych
  • Problemy z wydajnością
  • Awarie integracji
  1. Opisz symptom

    Błąd: Uwierzytelnianie użytkownika czasami nie działa
    Error: "Token validation failed"
    Częstotliwość: ~30% prób logowania
    Nie zidentyfikowano jasnego wzorca
  2. Pozwól AI dodać strategiczne logi

    // Prompt do Cursora
    @file auth/login.js
    @file auth/token.js
    Dodaj logowanie debugowania do śledzenia przepływu uwierzytelniania.
    Skup się na:
    - Generowaniu i walidacji tokenów
    - Problemach z timing
    - Zmianach stanu
    - Wywołaniach zewnętrznych API
  3. AI generuje ukierunkowane logowanie

    // AI dodaje strategiczne console.log
    async function validateToken(token) {
    console.log('[AUTH] Rozpoczynam walidację tokenu', {
    tokenLength: token?.length,
    timestamp: Date.now(),
    tokenPrefix: token?.substring(0, 10)
    });
    try {
    console.log('[AUTH] Dekoduję token...');
    const decoded = jwt.verify(token, SECRET);
    console.log('[AUTH] Token zdekodowany pomyślnie', {
    userId: decoded.userId,
    exp: decoded.exp,
    timeUntilExpiry: decoded.exp - Date.now()
    });
    // Więcej strategicznych logów...
    } catch (error) {
    console.error('[AUTH] Walidacja tokenu nie powiodła się', {
    error: error.message,
    token: token?.substring(0, 20),
    stack: error.stack
    });
    }
    }
  4. Uruchom i zbierz logi

    Okno terminala
    # Użyj trybu YOLO do automatycznego uruchomienia
    npm test -- --grep "authentication"
    # lub
    npm run dev > debug.log 2>&1
  5. Analizuj z AI

    @file debug.log
    Przeanalizuj te logi i zidentyfikuj:
    1. Przyczynę źródłową przerywanej pracy
    2. Wszelkie wzorce w błędach
    3. Sugerowane poprawki
## Szablon badania błędów
### 1. Dokumentacja symptomów
- **Co się dzieje**: [Dokładne zachowanie]
- **Oczekiwane zachowanie**: [Co powinno się dziać]
- **Komunikaty błędów**: [Skopiuj dokładne błędy]
- **Kroki do reprodukcji**: [Minimalne kroki]
### 2. Zbieranie kontekstu
@file [lokalizacja błędu]
@code [konkretna funkcja]
@recent-changes
@linter-errors
### 3. Prośba o analizę AI
Na podstawie powyższego kontekstu:
1. Jakie są najbardziej prawdopodobne przyczyny?
2. Jakie dodatkowe informacje by pomogły?
3. Zasugeruj kod diagnostyczny do dodania
// Krok 1: Poproś AI o dodanie profilowania pamięci
/**
* @cursor Dodaj wykrywanie wycieku pamięci:
* - Snapshoty heap w odstępach
* - Śledzenie alokacji obiektów
* - Liczenie event listenerów
* - Logowanie użycia pamięci
*/
// AI generuje:
const heapUsed = process.memoryUsage().heapUsed;
console.log(`Pamięć: ${Math.round(heapUsed / 1024 / 1024)}MB`);
// Śledź liczbę obiektów
const objectCounts = {};
setInterval(() => {
const snapshot = {};
// AI dodaje zaawansowane śledzenie
}, 5000);
Okno terminala
# Krok 1: Użyj AI do stworzenia skryptu git bisect
@cursor Stwórz skrypt który:
1. Używa git bisect do znalezienia kiedy błąd został wprowadzony
2. Automatycznie uruchamia nasz test
3. Identyfikuje łamiący commit
# AI generuje:
#!/bin/bash
# bisect-bug.sh
echo "Rozpoczynam automatyczny git bisect..."
# Zdefiniuj komendę testową
test_command="npm test -- --grep 'user authentication'"
# Rozpocznij bisect
git bisect start
git bisect bad HEAD
git bisect good v1.2.0 # Ostatnia znana dobra wersja
# Uruchom automatyczny bisect
git bisect run bash -c "$test_command && echo 'good' || echo 'bad'"
# Pobierz wynik
breaking_commit=$(git bisect view --oneline -1)
echo "Błąd wprowadzony w: $breaking_commit"
# Resetuj
git bisect reset
@git commit [breaking_commit_hash]
@file [changed_files_in_commit]
Przeanalizuj ten commit i wyjaśnij:
1. Co zmieniło się, co mogło spowodować [opis błędu]
2. Dlaczego ta zmiana łamie [funkcję]
3. Zasugeruj poprawkę zachowującą intencję
// Poproś AI o dodanie debugowania Redux
/**
* @cursor Dodaj kompleksowe debugowanie Redux:
* - Loguj wszystkie akcje z payload
* - Śledź zmiany stanu
* - Identyfikuj który komponent wywołał akcje
* - Wykryj mutacje stanu
*/
// AI tworzy middleware:
const debugMiddleware = store => next => action => {
console.group(`[REDUX] ${action.type}`);
console.log('Payload:', action.payload);
console.log('Poprzedni stan:', store.getState());
console.log('Wywołane przez:', new Error().stack.split('\n')[7]);
const result = next(action);
console.log('Nowy stan:', store.getState());
console.groupEnd();
return result;
};
// Krok 1: Poproś AI o dodanie śledzenia wydajności
/**
* @cursor Dodaj profilowanie wydajności do identyfikacji wąskich gardeł:
* - Czas wykonywania funkcji
* - Czas trwania zapytań do bazy danych
* - Opóźnienie wywołań API
* - Wydajność renderowania
* - Alokacja pamięci
*/
// AI generuje kompleksowe profilowanie:
const performanceTracker = {
marks: new Map(),
start(label) {
this.marks.set(label, {
start: performance.now(),
memory: process.memoryUsage().heapUsed
});
},
end(label) {
const mark = this.marks.get(label);
if (!mark) return;
const duration = performance.now() - mark.start;
const memoryDelta = process.memoryUsage().heapUsed - mark.memory;
console.log(`[PERF] ${label}`, {
duration: `${duration.toFixed(2)}ms`,
memory: `${(memoryDelta / 1024).toFixed(2)}KB`,
slow: duration > 100
});
if (duration > 100) {
console.warn(`[PERF] Wykryto wolną operację: ${label}`);
}
}
};
// Użycie w kodzie
performanceTracker.start('database-query');
const results = await db.query(sql);
performanceTracker.end('database-query');
# Przy problemach z przetwarzaniem danych
@cursor Pomóż mi zaimplementować debugowanie wyszukiwaniem binarnym:
1. Błąd występuje przy przetwarzaniu dużych zbiorów danych
2. Działa dobrze z małymi danymi (< 100 elementów)
3. Nie działa z dużymi danymi (> 10000 elementów)
Stwórz podejście wyszukiwania binarnego do znalezienia dokładnego rozmiaru danych
gdzie zaczyna nie działać.
// Porównaj działające vs zepsute scenariusze
/**
* @cursor Stwórz debugger porównujący:
*
* Scenariusz działający: Użytkownik A może się zalogować
* Scenariusz zepsuty: Użytkownik B nie może się zalogować
*
* Dodaj logowanie które przechwytuje i porównuje:
* - Wszystkie parametry funkcji
* - Wartości zwracane
* - Stan w każdym kroku
* - Różnice w czasie
*
* Wyprowadź diff pokazujący gdzie ścieżki się rozchodzą
*/
// Śledzenie historii stanu
/**
* @cursor Stwórz debugowanie podróży w czasie dla naszej aplikacji:
* - Przechowuj ostatnie 50 zmian stanu
* - Pozwól na odtworzenie przejść stanu
* - Identyfikuj które przejście spowodowało błąd
* - Eksportuj historię stanu do analizy
*/
const stateHistory = {
states: [],
maxHistory: 50,
record(state, action) {
this.states.push({
state: JSON.parse(JSON.stringify(state)),
action,
timestamp: Date.now(),
stack: new Error().stack
});
if (this.states.length > this.maxHistory) {
this.states.shift();
}
},
replay(fromIndex = 0) {
// Odtwórz przejścia stanu
},
export() {
// Eksportuj do analizy
}
};
#!/bin/bash
# auto-debug.sh - Automatyzacja debugowania wspomagana przez AI
echo "🔍 Rozpoczynam sesję debugowania wspomaganą przez AI..."
# Krok 1: Zbierz informacje o błędach
echo "📝 Zbieranie logów błędów..."
npm test 2>&1 | tee test-output.log
# Krok 2: Otwórz logi w Cursorze do analizy AI
echo "🤖 Otwieranie w Cursorze do analizy..."
cursor test-output.log
# Krok 3: Użyj AI Cursora do analizy i naprawy
# W Cursorze możesz:
# - Użyć @test-output.log do referencji logu błędów
# - Poprosić AI o analizę błędów i sugestie poprawek
# - Użyć AI do wygenerowania poprawek dla zidentyfikowanych problemów
# Krok 4: Uruchom weryfikację
echo "✅ Weryfikacja poprawek..."
npm test
echo "📊 Sesja debugowania zakończona!"
MetrykaTradycyjneWspomagane przez AIPoprawa
Średni czas naprawy błędu4.5 godziny1.2 godziny73% szybciej
Dokładność przyczyny źródłowej60%95%58% lepiej
Wskaźnik regresji15%3%80% mniej
Frustracja developeraWysokaNiskaBezcenne
  • Czy mogę powtórzyć błąd konsekwentnie?
  • Mam dokładne komunikaty błędów/symptomy?
  • Sprawdziłem ostatnie zmiany?
  • Zweryfikowałem, że to nie jest problem środowiska?
  • Mam minimalny przypadek reprodukcji?
  • Dodane strategiczne logowanie
  • Zidentyfikowany wzorzec/kategoria błędu
  • Znaleziona przyczyna źródłowa (nie tylko symptom)
  • Przetestowana poprawka w izolacji
  • Zweryfikowany brak regresji
  • Udokumentowana poprawka
  • Dodany test zapobiegający regresji
  • Zaktualizowana dokumentacja
  • Podzielone uczenie się z zespołem
  • Dodane do playbooka debugowania
  • Rozważone strategie zapobiegania

Opanuj przepływy debugowania aby:

  • Zmniejszyć czas debugowania o 70%+
  • Znajdować przyczyny źródłowe bardziej niezawodnie
  • Zapobiegać powrotom błędów
  • Zachować zdrowie psychiczne developera

Kontynuuj z:

Pamiętaj: Najlepszy debugger to ten, który pomaga zrozumieć nie tylko co jest zepsute, ale dlaczego się zepsuło i jak zapobiec powtórnemu zepsuciu.