Vezérlőpult
A9. Kódolvasás és hibakeresés · Bevezetés, környezet, Git

A blokk · Bevezetés, környezet, Git · 9. tananyag

Kódolvasás és hibakeresés

A programozó több időt tölt kódolvasással, mint kódírással. És amikor a program mást csinál, mint amit vártál, nem találgatni kell, hanem belenézni: erre való a debugger. A harmadik téma: mit bocsát meg a fordító (whitespace) — és mit nem bocsát meg a munkatársad (rendetlen formázás).

2 tanóraGyakorlatközpontúAz A blokk zárófejezete

Tanulási célok

1Kódolvasás — futtasd fejben!

A gép a programot sorról sorra, felülről lefelé hajtja végre (A6). A kódolvasás ugyanez: végigmész a sorokon, és minden sornál kigondolod, mit csinál. Ezt hívjuk a program fejben futtatásának (szaknyelven: trace).

Próbáld ki — mit ír ki ez a program?

Console.Write("Prog");
Console.Write("ram");
Console.WriteLine("ozás");
Console.WriteLine("2025");

Fejben futtatva: Write → nincs sortörés → a három darab egy sorba kerül:

Programozás
2025

Ha ezt fejben kihoztad, kódot olvastál — pont úgy, ahogy a gép.

💡 TIPP

Az órákon és a számonkéréseken is lesz „mit ír ki?” feladat. A titok mindig ugyanaz: ne tippelj ránézésre — menj végig soronként, és írd le magadnak a kimenetet menet közben.

2A hibakereső (debugger) — nézz bele a futó programba!

Az A5-ben megtanultuk: F5 = futtatás hibakeresővel. Eddig nem volt jelentősége — most megtöltjük tartalommal.

Töréspont (breakpoint)

  1. Kattints a szerkesztőben egy sor bal margójára (vagy nyomj F9-et a soron) → piros pötty jelenik meg: ez a töréspont.
  2. Indítsd a programot F5-tel → a futás megáll a törésponton, a sor sárgán kiemelve, egy sárga nyíl mutatja: ez a sor jön, még nem futott le.

Léptetés

BillentyűNeveMit csinál?
F10Step Overvégrehajtja az aktuális sort, a következőn áll meg
F11Step Intomint az F10, de a metódushívásba belelép (a D blokktól lesz izgalmas)
F5Continuefutás tovább a következő töréspontig (vagy a végéig)
Shift+F5Stopa hibakeresés leállítása

Léptetés közben rendezd egymás mellé a Visual Studiót és a konzolablakot: F10 → és a szemed előtt jelenik meg a következő kiírt sor. A program futása kézzelfoghatóvá válik.

ℹ️ ELŐREUTALÁS

A debugger igazi szupererejét a B blokktól látod majd: a Locals és a Watch ablakban futás közben figyelheted a változók értékét. Most a léptetést és a töréspontot gyakoroljuk be — ez az alap.

Mikor nyúlj a debuggerhez?

Amikor a program mást csinál, mint amit vársz, és ránézésre nem látod, miért. A kezdők találgatnak és véletlenszerűen átírnak dolgokat — a profik letesznek egy töréspontot oda, ahol a baj gyanítható, és megnézik, mi történik valójában.

3Mit bocsát meg a fordító? — a whitespace

Whitespace = a „láthatatlan” karakterek: szóköz, tabulátor, sortörés, üres sor. A C#-fordító szempontjából az utasítások határait a pontosvessző és a kapcsos zárójelek jelölik ki — a whitespace mennyisége nem számít:

// Ez a három program a fordítónak UGYANAZ:

Console.WriteLine("Szia");

Console   .   WriteLine  (  "Szia"  )   ;

Console
    .WriteLine(
        "Szia"
    );

De vigyázat, van négy hely, ahol a whitespace igenis számít:

Hol?Mi történik?
szó belsejébenWrite Line — két külön szó lett belőle: fordítási hiba
string literálon belül"S z i a" — pontosan így íródik ki: a szóköz ott adat!
sortörés a string literálbannyers sortörés nem lehet benne — de a Visual Studio Enterre kettébontja a literált, és + jellel fűzi össze, így a program változatlanul működik
// megjegyzés utánaz egysoros megjegyzés a sor végéig tart - bármilyen whitespace karaktert is írsz utána (kivéve a sortörést)
ℹ️ JÓ TUDNI

A Visual Studio által beszúrt + a stringek összefűzése — a "Szia, " + "Anna" ugyanaz, mint a "Szia, Anna". Részletesen a B blokkban tanuljuk; kevésbé okos szerkesztőben a nyers sortörés a literálban CS1010 hibát adna.

⚠️ A TANULSÁG KÉTIRÁNYÚ

A fordítónak mindegy a formázás. Az embernek nem. A szabadságot nem arra használjuk, hogy összevissza írjunk, hanem arra, hogy egységesen, olvashatóan tördeljünk.

Ugyanúgy működik, hiba, vagy más lesz a kimenet?

Mi történik a programmal, ha ezt a változtatást megcsinálod?

1 / 8Pontszám: 0

4Kódolási stílus — bevezető

A kódot egyszer írod, sokszor olvasod (te, a munkatársad, a jövőbeli önmagad). A stílusszabályok első csomagja — a többi majd akkor jön, amikor az adott nyelvi elemet tanuljuk:

  1. Egy utasítás — egy sor. Hiába enged mást a fordító.
  2. Behúzás: ami kapcsos zárójelek között van, az egy szinttel beljebb kezdődik (a Visual Studio ezt automatikusan csinálja — ne dolgozz ellene).
  3. Üres sorokkal tagolj: az összetartozó sorok maradjanak együtt, a gondolati egységek között legyen egy üres sor — mint a bekezdések egy fogalmazásban.
  4. A megjegyzés a MIÉRT-et mondja el, ne a MIT.
    // kiírja a nevet — fölösleges, ezt a kód is mondja.
    // a keret 28 karakter széles, ehhez igazítjuk a sorokat — ez már segít.
  5. Rendetlenség ellen: Ctrl+K, Ctrl+D — a Visual Studio a teljes fájlt szabályosra formázza. Szokásod legyen commit előtt!

(Az elnevezési szabályok — PascalCase, camelCase — a B blokkban jönnek, a változókkal együtt: ott lesz mit elnevezni.)

5Gyakorlat — az első nyomozásod

  1. Nyisd meg a Nevjegy projektet (A6–A7), és csúfítsd el szándékosan: húzz szét két utasítást több sorba, tegyél fölösleges szóközöket, zsúfolj két WriteLine-t egy sorba. Futtasd: működik — a fordítónak mindegy.
  2. Nyomd meg: Ctrl+K, Ctrl+D — a Visual Studio kitakarít. Nézd meg a Git Changes diffjét (A7!): pontosan látod, mit igazított.
  3. Tegyél töréspontot az első WriteLine sorra (F9), és indíts F5-tel. A sárga nyíl az első soron áll — a konzol még üres!
  4. Lépkedj F10-zel, és figyeld a konzolt: soronként jelennek meg a kiírások. A végén F5 lefuttatja a maradékot.
  5. Zárd a kört: commitold a kitakarított kódot (Formázás rendbe téve üzenettel).
✅ ELLENŐRZŐ PONT

Láttad, hogy a formázás nem változtat a működésen; a töréspontnál megállt a program; és F10-zel soronként követted a futást.

6Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

A9.1

Futtasd fejben, írd le a pontos kimenetet — csak utána ellenőrizd géppel:

Console.Write("C");
Console.Write("#");
Console.WriteLine("!");
Console.Write("10");
Console.WriteLine(".");
A9.2

Sorold fel a négy helyet, ahol a whitespace-nek jelentősége van!

A9.3⭐⭐

Az alábbi kód működik, de csúnya. Írd át szabályosra (papíron vagy gépen), majd ellenőrizd a Ctrl+K, Ctrl+D eredményével:

Console.WriteLine("Egy");Console.WriteLine("Kettő");Console
.WriteLine("Három");
A9.4⭐⭐

Tegyél töréspontot a lépcső-programod (A6.3) közepére. Indítsd F5-tel, és mielőtt F10-et nyomnál, mondd ki hangosan: mi van már a konzolon, és mi jön következőnek? Ellenőrizd léptetéssel!

A9.5⭐⭐⭐

Írj egy 6–8 soros „mit ír ki?” feladványt a padtársadnak Write és WriteLine keverésével. Cseréljetek, futtassátok fejben, aztán géppel — ki találta el a másikét?

7Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

8Fogalomtár

FogalomJelentés
kódolvasás / fejben futtatás (trace)a program soronkénti követése futtatás nélkül
debugger (hibakereső)eszköz, amellyel a futó program megállítható és lépésenként követhető
töréspont (breakpoint)jelölés egy soron: a debugger itt megállítja a futást (F9)
léptetés (stepping)a megállított program soronkénti végrehajtása (F10, F11)
Step Over / Step IntoF10: a sort egyben hajtja végre · F11: a metódushívásba belép
whitespaceláthatatlan karakterek: szóköz, tabulátor, sortörés, üres sor
behúzás (indentation)a kód beljebb kezdése a szerkezet jelzésére
kódolási stílusmegállapodások a kód formázásáról az olvashatóságért

9Összegzés

  1. A programozó többet olvas, mint ír: a kódolvasás = fejben futtatás, soronként, tippelés nélkül.
  2. A debugger a nyomozóeszköz: töréspont (F9) → indítás (F5) → léptetés (F10) — a sárga nyíl mutatja, mi jön. Találgatás helyett nézd meg, mi történik valójában.
  3. A fordítónak a whitespace nem számít — kivéve szó belsejében és string literálban, ahol nagyon is.
  4. A formázási szabadság felelősség: egy utasítás egy sor, behúzás, tagolás, miért-et mondó megjegyzések.
  5. Ctrl+K, Ctrl+D commit előtt — a rendes formázás ugyanúgy a munkád része, mint a működő kód.