Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:m291:learningunits:lu07:theorie:lu07a_debugging [2026/03/22 15:50] gkochde:modul:m291:learningunits:lu07:theorie:lu07a_debugging [2026/03/22 22:03] (aktuell) – ä gkoch
Zeile 1: Zeile 1:
 ====== LU07: Debugging – Fehler finden und verstehen ====== ====== LU07: Debugging – Fehler finden und verstehen ======
  
-Debugging bedeutet, den Browser (oder den Editorzu **befragen** – mit den richtigen Werkzeugen, in der richtigen Reihenfolge.+{{:de:modul:m291:learningunits:lu07:theorie:debugging.png?nolink&400| Debugging: wie ein Detektiv nach Spuren suchtmüssen auch Entwickler:innen den Fehlern auf die Suche gehen.}} 
 + 
 +Debugging bedeutet, mit dem Browser oder dem Code-Editor zu **Spuren des Fehlers** nachzuforschen – mit den richtigen Werkzeugen, in der richtigen Reihenfolge.
  
 <WRAP center round tip 80%> <WRAP center round tip 80%>
Zeile 14: Zeile 16:
  
 Eine gute Debugging-Gewohnheit folgt immer dieser Reihenfolge: Eine gute Debugging-Gewohnheit folgt immer dieser Reihenfolge:
- 
 <WRAP round box 80% center> <WRAP round box 80% center>
-^ Schritt ^ Frage +^ Schritt ^ Was Sie tun ^  ^ Beispiel 
-**1. Read** | Lesen Sie die Fehlermeldung genau. Was steht da wirklich? | +| 1. Read | Lesen Sie die Fehlermeldung genau. Was steht da wirklich? Welche Zeile wird genannt? | ''ReferenceError: e is not defined (script.js:4)'' 
-**2. Reproduce** Können Sie den Fehler wiederholt auslösenUnter welchen Bedingungen? | +| 2. Reproduce | Lösen Sie den Fehler bewusst aus. | Passiert er immer, oder nur manchmalBei welcher Aktion genau| „Fehler erscheint jedes Mal, wenn ich auf einen Button klicke" 
-**3. Reduce** Welches ist der kleinste mögliche Code, der das Problem zeigt? | +| 3. Reduce | Grenzen Sie das Problem ein. | Welche Zeile, welche Variable, welches Element ist betroffen| ''console.log(buttons.length)'' ergibt 0 → Problem liegt im Selector 
-**4. Fix** | Ändern Sie **eine** Sache – dann testen Sie sofort. |+| 4. Fix | Ändern Sie eine einzige Sache – nicht mehrere auf einmal. | Danach sofort testen: Hat diese Änderung den Fehler behoben? | Punkt vor Klassennamen ergänzt → ''buttons.length'' ergibt nun 4 |
 </WRAP> </WRAP>
  
Zeile 34: Zeile 35:
 ^ Schritt ^ Werkzeug ^ Hilft bei ^ ^ Schritt ^ Werkzeug ^ Hilft bei ^
 | 1 | Formatter / Linter | Syntaxfehler (fehlende Klammern, Tippfehler, falsch geschachteltes HTML) | | 1 | Formatter / Linter | Syntaxfehler (fehlende Klammern, Tippfehler, falsch geschachteltes HTML) |
-| 2 | Console / Breakpoints | Laufzeitfehler (was passiert, während der Code läuft) |+| 2 | Console | Laufzeitfehler (was passiert, während der Code läuft) |
 | 3 | Elements-Tab | Rendering-Fehler (was macht der Browser aus Ihrem CSS/HTML) | | 3 | Elements-Tab | Rendering-Fehler (was macht der Browser aus Ihrem CSS/HTML) |
 </WRAP> </WRAP>
Zeile 106: Zeile 107:
  
 <WRAP center round important 80%> <WRAP center round important 80%>
-**Vorsicht beim Kopieren aus Moodle oder Word:** Textverarbeitungsprogramme ersetzen gerade Anführungszeichen ('' " '') durch typografische („ "). Im Browser-Code führt das zu stillen Fehlern.\\+**Vorsicht beim Kopieren aus Moodle oder Word:** Textverarbeitungsprogramme ersetzen gerade Anführungszeichen ('' " '') durch typografische („ "). Im Browser-Code führt das zu versteckten Fehlern.\\
 Fügen Sie kopierten Code immer als **Plain Text** ein: **Cmd+Shift+V** (Mac) / **Ctrl+Shift+V** (Windows). Fügen Sie kopierten Code immer als **Plain Text** ein: **Cmd+Shift+V** (Mac) / **Ctrl+Shift+V** (Windows).
 </WRAP> </WRAP>
Zeile 193: Zeile 194:
 </code> </code>
  
-{{:de:modul:m291:learningunits:lu07:theorie:screenshot_2026-03-22_at_14.49.40.png?nolink&800| Screenshot mit Fehlermeldung in Entwicklertools}}+{{:de:modul:m291:learningunits:lu07:theorie:screenshot_2026-03-22_at_14.49.40.png?direct&900| Screenshot mit Fehlermeldung in Entwicklertools}}
  
 **Was passiert:** **Was passiert:**
Zeile 219: Zeile 220:
  
 ==== Script-Position: Ein stiller, häufiger Fehler ==== ==== Script-Position: Ein stiller, häufiger Fehler ====
 +
 +Wird die Verlinkung zum JavaScript-File im ''<head>'' Teil des HTML angegeben, dann wird der JS-Code schon ausgeführt, ohne dass die Elemente im HTML durch den Browser erstellt (geparst) wurden. Das kann dazu führen, dass ''querySelector()'' null zurückgibt, obwohl im HTML-Code das Element vorhanden ist.
 + 
  
 <WRAP round box 80% center> <WRAP round box 80% center>
 +=== Script im <head> - falsch! ===
 +{{:de:modul:m291:learningunits:lu07:theorie:script_im_head.png?nolink&700| Script im Head}}
 +
 <code html> <code html>
-<!-- ❌ Script im <head> – HTML ist noch nicht geladen wenn JS läuft --> 
-<!-- → document.querySelectorAll('.accordion-btn') gibt null zurück --> 
 <!DOCTYPE html> <!DOCTYPE html>
 <html> <html>
Zeile 230: Zeile 235:
 </head> </head>
 <body> <body>
-  <button class="accordion-btn">Frage 1</button>+ 
 </body> </body>
 </html> </html>
  
-<!-- ✅ Script am Ende von <body> – HTML ist vollständig geladen --> +=== Script vor </body> - gut! === 
-<!DOCTYPE html> + 
-<html> +{{:de:modul:m291:learningunits:lu07:theorie:script_before_body.png?nolink&700| Script im Body}}
-<head> +
-  <link href="style.css" rel="stylesheet"> +
-</head> +
-<body> +
-  <button class="accordion-btn">Frage 1</button>+
  
-  <script src="script.js"></script>  <!-- ← hier --> 
-</body> 
-</html> 
-</code> 
 </WRAP> </WRAP>
  
Zeile 254: Zeile 250:
  
 Der Elements-Tab zeigt, was der Browser **tatsächlich** aus Ihrem Code gemacht hat – nicht was Sie geschrieben haben, sondern was nach dem Parsen und Rendern übrig bleibt. Der Elements-Tab zeigt, was der Browser **tatsächlich** aus Ihrem Code gemacht hat – nicht was Sie geschrieben haben, sondern was nach dem Parsen und Rendern übrig bleibt.
 +
 +{{:de:modul:m291:learningunits:lu07:theorie:screenshot_2026-03-22_at_21.53.20.png?nolink&800| Elements-Tab im Browser}}
  
 ==== CSS live ausprobieren ==== ==== CSS live ausprobieren ====
Zeile 261: Zeile 259:
   - Rechts: Styles-Panel   - Rechts: Styles-Panel
   - Eigenschaft anklicken und Wert ändern   - Eigenschaft anklicken und Wert ändern
-  - **Sofortiges Feedback** – ohne die Datei zu speichern+  - Änderung wird direkt im Browser gerendert und sichtbar
  
 Wenn der Look stimmt: dann erst in die CSS-Datei übertragen. Wenn der Look stimmt: dann erst in die CSS-Datei übertragen.
  
 <WRAP center round tip 80%> <WRAP center round tip 80%>
-Deaktivierte CSS-Regeln (durchgestrichen) bedeuten: eine andere Regel mit höherer Spezifität gewinntDer **Computed-Tab** zeigt den tatsächlich angewendeten Wert. +Deaktivierte CSS-Regeln (durchgestrichen) bedeuten: eine andere Regel mit höherer Spezifität (s. CSS Kaskade LU02gewinnt oder es gibt ein Syntax-Fehler.
-</WRAP> +
- +
-==== Der Computed-Tab ==== +
- +
-Wenn ''height: auto'' im CSS steht, aber die Transition nicht funktioniert:\\ +
-→ Computed-Tab öffnen → dort steht der **berechnete Pixelwert**. +
- +
-Das erklärt, warum ''transition: height'' auf ''auto'' nicht direkt funktioniert – der Browser kennt den Zielwert nicht. (Lösung: ''interpolate-size: allow-keywords;'') +
- +
- +
-===== Breakpoints setzen ===== +
- +
-Manchmal reicht ''console.log'' nicht aus. Breakpoints stoppen den Code an einer bestimmten Stelle und ermöglichen es, den Zustand genau zu untersuchen. +
- +
-**So geht's:** +
-  DevTools öffnen → Tab **Sources** +
-  - Die JS-Datei links in der Dateiliste anklicken +
-  - Zeilennummer links anklicken → blauer Punkt = Breakpoint gesetzt +
-  - Seite neu laden oder Aktion ausführen → Code stoppt an dieser Stelle +
-  - Rechts sehen Sie alle aktuellen Variablenwerte +
- +
-**Navigieren:** +
-  * **Step over** (F10): Nächste Zeile ausführen +
-  * **Step into** (F11): In eine Funktion hineinsteigen +
-  * **Resume** (F8): Weiter bis zum nächsten Breakpoint +
- +
-<WRAP center round info 80%> +
-Für den Anfang reicht: Breakpoint setzen, einmal F10 drücken, Variablenwert rechts ablesen.\\ +
-Den Rest lernen Sie automatisch, wenn Sie ihn brauchen.+
 </WRAP> </WRAP>
  
Zeile 311: Zeile 280:
 </WRAP> </WRAP>
  
- 
-===== Übungsaufgabe: Bugs im Accordion finden ===== 
- 
-Der folgende Code enthält **4 absichtliche Bugs** – alle stammen aus echten Fehlern aus dem Unterricht. Öffnen Sie DevTools und finden Sie die Fehler, ohne den Code anzustarren. Benutzen Sie Console, Elements-Tab oder Breakpoints. 
- 
-**HTML-Datei:** 
- 
-<WRAP round box 80% center> 
-<code html> 
-<!DOCTYPE html> 
-<html> 
-<head> 
-  <script src="script.js"></script> 
-  <link href="style" rel="stylesheet"> 
-</head> 
-<body> 
-  <div class="accordion"> 
-    <button class="accordion-btn">Frage 1</button> 
-    <div class="panel">Antwort 1</div> 
-    <button class="accordion-btn">Frage 2</button> 
-    <div class="panel">Antwort 2</div> 
-  </div> 
-</body> 
-</html> 
-</code> 
-</WRAP> 
- 
-**JavaScript-Datei:** 
- 
-<WRAP round box 80% center> 
-<code js> 
-const buttons = document.querySelectorAll('accordion-btn'); 
- 
-buttons.forEach((button) => { 
-  button.addEventListener('click', () => { 
-    const panelElement = e.target.nextElementSibling; 
-    panelElement.classList.toggle('open'); 
-  }); 
-}); 
-</code> 
-</WRAP> 
- 
-**Tipps:** 
-  * Bug 1: Erzeugt keinen Fehler – aber die Styles werden nicht geladen 
-  * Bug 2: Erzeugt keinen Fehler – aber ''buttons.length'' verrät ihn 
-  * Bug 3: ''TypeError: Cannot read properties of null'' – Zusammenhang mit der Script-Position 
-  * Bug 4: ''ReferenceError: e is not defined'' 
- 
-<WRAP center round info 80%> 
-Schreiben Sie für jeden gefundenen Bug das **Debugging-Protokoll** aus: Was haben Sie beobachtet? Was war Ihre Hypothese? Wie haben Sie es geprüft? 
-</WRAP> 
  
 ===== Zusammenfassung ===== ===== Zusammenfassung =====
Zeile 368: Zeile 286:
 ^ Werkzeug ^ Wann einsetzen ^ ^ Werkzeug ^ Wann einsetzen ^
 | **Formatter / Prettier** | Zuerst immer – Syntaxfehler, Tippfehler in CSS-Eigenschaften, falsche Anführungszeichen | | **Formatter / Prettier** | Zuerst immer – Syntaxfehler, Tippfehler in CSS-Eigenschaften, falsche Anführungszeichen |
-| **Console** | Wenn etwas passiert oder nicht passiert – Fehlermeldung lesen, ''console.log()'' einsetzen |+| **Console** | Wenn etwas passiert oder nicht passiert – Fehlermeldung lesen, ''console.log()'' einsetzen, Variablenwerte prüfen  |
 | **Elements-Tab** | Wenn das Layout falsch aussieht – CSS live anpassen, Computed-Tab prüfen | | **Elements-Tab** | Wenn das Layout falsch aussieht – CSS live anpassen, Computed-Tab prüfen |
-| **Breakpoints** | Wenn ''console.log'' nicht ausreicht – Code anhalten, Variablenwerte prüfen | 
 </WRAP> </WRAP>
  
  • de/modul/m291/learningunits/lu07/theorie/lu07a_debugging.1774191059.txt.gz
  • Zuletzt geändert: 2026/03/22 15:50
  • von gkoch