Lecture 5: Debugging Flashcards

(9 cards)

1
Q

Welche Compiler-Optionen werden empfohlen, um möglichst viele potenzielle Fehler schon beim Übersetzen zu erkennen?

A

-Wall und -Wextra. Sie aktivieren umfangreiche Warnungen; Ziel ist, einen Codezustand ohne Warnungen zu erreichen, was die Qualität deutlich erhöht.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Warum ist ein „warnungsfreier“ Build ein Debugging-Ziel?

A

Warnungen weisen früh auf mögliche Fehlerquellen hin; eliminiert man sie, sinkt die Wahrscheinlichkeit späterer Laufzeit-Bugs.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie kann man mit printf debuggen und welche Rolle spielt dabei der Output-Buffer?

A

Durch Ausgeben von Variablenwerten mit printf. Da Ausgaben gepuffert sind, sollte man bei Absturz-verdächtigem Code fflush(stdout); aufrufen, um die Ausgabe sofort sichtbar zu machen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Welchen Nachteil hat häufiges fflush(stdout); beim Debugging?

A

Es sichert zwar sofortige Ausgabe, kann aber die Performance deutlich verschlechtern.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was ist eine Invariante und wie helfen Assertions dabei?

A

Eine Invariante ist eine Bedingung, die im gesamten Programmlauf wahr sein muss. assert(condition); prüft sie zur Laufzeit und signalisiert logisch falsche Zustände sofort. ​

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Welche Header-Datei wird für assert benötigt und wie deaktiviert man Assertions in Release-Builds?

A

include <assert.h>; mit dem Compiler-Schalter -DNDEBUG werden Assertions übersprungen. ​</assert.h>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Warum sollten Assertions nicht als reguläre Fehlerbehandlung genutzt werden?

A

Sie dienen dem Debugging, um Programmierfehler aufzudecken. Im Produktivcode sollen definierte Fehlerwege verwendet werden, nicht Programmabbrüche via assert. ​

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Welches Problem deckt das Beispiel der fehlerhaften factorial-Funktion mithilfe von assert auf?

A

Die Assertion assert(n >= 0); enthüllt, dass ein Basisfall fehlt; ohne ihn führt die Rekursion zum Stack-Overflow. ​

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was ist der Hauptvorteil von Compiler-Warnungen gegenüber Laufzeit-Debugging?

A

Fehler werden schon vor dem Ausführen entdeckt, was Debugging-Zeit spart und stabilere Builds schafft. ​

How well did you know this?
1
Not at all
2
3
4
5
Perfectly