Hoppa till innehållet
AI-grafen
D· AI-utvecklareprogrammering· ca 45 min· grundläggande — ändras sällan· verifierad 2026-09-20

Felsökning och debuggern

Kunna använda breakpoints, läsa stack traces och isolera ett fel systematiskt.

Förkunskaper

Intuition

Läs stack tracen nedifrån och upp. Understa raden är felet; ovanför står vägen dit. Den sista raden i din egen kod är nästan alltid där du ska börja.

Traceback (most recent call last):
  File "cli.py", line 12, in main
    resultat = trana(X, y)              ← din kod
  File "model.py", line 45, in trana
    return X @ w                        ← din kod, här sker det
ValueError: matmul: mismatch (100,5) (4,)   ← felet

Felet säger: X har 5 kolumner men w har 4 element. Nu vet du vad du letar efter.

Den systematiska metoden: reproducera → förminska → hypotes → test → ändra en sak.

Kod

# 1. Breakpoint — stanna och titta
def trana(X, y):
    breakpoint()          # kör programmet; du hamnar i pdb
    return X @ w

# I pdb: p X.shape   (visa)   n (nästa rad)   s (stega in)   c (fortsätt)   q (avsluta)

# 2. Kontroller som säger till direkt i stället för långt senare
assert X.shape[1] == len(w), f"X har {X.shape[1]} kolumner men w har {len(w)}"

# 3. Loggning i stället för print — går att stänga av och har nivåer
import logging
log = logging.getLogger(__name__)
log.debug("X=%s y=%s", X.shape, y.shape)

# 4. Halveringsmetoden i git när något slutade fungera
# git bisect start; git bisect bad; git bisect good <gammal-commit>

Förminska felet. Går det att reproducera med 5 rader data i stället för 50 000? Med en funktion i stället för hela programmet? Nio gånger av tio hittar du felet under förminskningen — innan du ens startat debuggern.

Behärskning innebär

  • Läser en stack trace och hittar den relevanta raden
  • Isolerar ett fel systematiskt i stället för att gissa
  • Använder breakpoints

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser