Berichte lesen
Ausgaben interpretieren
Berichte lesen ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Aufbau eines Berichts
Ein Valgrind-Bericht besteht aus drei Teilen:
- dem Präfix mit der Prozess-ID in jeder Zeile
- einem oder mehreren Fehlerblöcken, sobald sie auftreten
- einer abschließenden HEAP and LEAK SUMMARY beim Beenden
Wenn Sie lernen, jeden Teil zu lesen, wird aus einer Textwand eine präzise To-do-Liste.
Das PID-Präfix
Jede Valgrind-Zeile beginnt mit ==PID==, zum Beispiel ==12345==.
Dies ist die Prozess-ID und kein Bestandteil der Ausgabe Ihres Programms. So können Sie Valgrinds Meldungen von den printf-Ausgaben Ihres Programms unterscheiden, wenn beide dasselbe Terminal verwenden.
==12345== Memcheck, a memory error detector
==12345== Command: ./prog
==12345==Ein Beispiel für einen Fehlerblock
Hier sehen Sie einen echten Block für einen ungültigen Schreibzugriff:
==12345== Invalid write of size 4==12345== at 0x4005A1: main (prog.c:6)==12345== Address 0x520304c is 0 bytes after a block of size 20 alloc'd==12345== at 0x4838B40: malloc==12345== by 0x40058E: main (prog.c:5)
Die erste Zeile lesen
Die erste Zeile nennt Fehlerart und Größe: „Invalid write of size 4“.
Größe 4 bedeutet einen 4 Byte großen Zugriff, typischerweise auf ein int. Diese eine Zeile sagt Ihnen, welche Fehlerkategorie Sie erwarten können, bevor Sie weiterlesen.
Den Stacktrace lesen
Die Zeile mit at ist der innerste Stackframe, in dem der Fehler aufgetreten ist. Jede Zeile mit by nennt einen Aufrufer, also eine Ebene darüber.
Lesen Sie den Trace von oben nach unten, vom tiefsten zum obersten Frame. Der erste Frame mit dem Namen Ihrer Datei ist fast immer die Fehlerstelle.
==12345== at 0x4005A1: do_work (work.c:12)
==12345== by 0x4006F0: main (main.c:8)Den Adresshinweis lesen
Die Zeile Address ... ordnet den Zugriff relativ zu einem bekannten Block ein:
0 bytes after a block of size 20 alloc'd— Überlauf direkt hinter dem Ende4 bytes inside a block of size 4 free'd— Verwendung nach der Freigabeon thread 1's stack— ein Stackzugriff
Außerdem wird angezeigt, wo dieser Block allokiert oder freigegeben wurde.
Die HEAP SUMMARY
Beim Beenden erhalten Sie eine Übersicht über die Speicherallokationen:
==12345== HEAP SUMMARY:==12345== in use at exit: 20 bytes in 1 blocks==12345== total heap usage: 3 allocs, 2 frees, 1,044 bytes allocated
Ein Wert größer als null bei „in use at exit“ bedeutet, dass etwas nicht freigegeben wurde.
Die LEAK SUMMARY
Unterhalb der Heap-Zusammenfassung werden Leaks kategorisiert:
definitely lost: 20 bytes in 1 blocksindirectly lost: 0 bytes in 0 blockspossibly lost: 0 bytes in 0 blocksstill reachable: 0 bytes in 0 blocks
Fügen Sie --leak-check=full hinzu, um für jeden verlorenen Block einen Trace anzuzeigen.
Die ERROR SUMMARY
Die allerletzte Zeile zählt alle Fehler:
ERROR SUMMARY: 2 errors from 2 contexts
Ein „Kontext“ ist eine eindeutige Fehlerstelle. Wenn eine fehlerhafte Zeile eine Million Mal in einer Schleife ausgeführt wird, handelt es sich trotzdem nur um einen Kontext. Ihr Ziel lautet 0 errors from 0 contexts.
Reihenfolge bei der Fehleranalyse
Arbeiten Sie den Bericht systematisch ab:
- Beheben Sie zuerst Fehler bei ungültigen Speicherzugriffen; sie verursachen Beschädigungen
- Danach folgen Fehler mit nicht initialisierten Werten
- Dann beheben Sie Leaks, die definitely und indirectly lost sind
- Führen Sie das Programm nach jeder Korrektur erneut aus; eine gemeinsame Ursache beseitigt oft mehrere Meldungen
Bekanntes Rauschen unterdrücken
Einige Fehler stammen aus Bibliotheken, die Sie nicht ändern können, etwa aus der C-Laufzeitumgebung oder einem Grafiktreiber. Erzeugen Sie eine Suppressionsdatei, um diese Meldungen auszublenden, ohne Ihre eigenen Fehler zu verbergen.
--gen-suppressions=all gibt sofort verwendbare Suppression-Einträge aus, die Sie speichern und anschließend mit --suppressions=file wieder übergeben.
valgrind --gen-suppressions=all ./prog
valgrind --suppressions=mine.supp ./progSchnelltest
Interpretieren Sie eine Zeile eines Berichts.
Zusammenfassung
Sie können Valgrind-Berichte jetzt vollständig lesen:
==PID==-Präfixe kennzeichnen Valgrind-Zeilen und trennen sie von der Programmausgabe- Jeder Fehlerblock enthält Art, Größe, Stacktrace und einen Adresshinweis
- HEAP- und LEAK-Zusammenfassungen dokumentieren Allokationen und verlorenen Speicher
- Die ERROR SUMMARY zählt eindeutige Kontexte; streben Sie null an
Analysieren Sie zuerst Zugriffsfehler und danach Leaks. Führen Sie das Programm dabei immer wieder aus.
Häufig gestellte Fragen
Ist die Lektion „Berichte lesen“ kostenlos?
Ja — der vollständige Text von „Berichte lesen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Berichte lesen“?
Ausgaben interpretieren Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C Academy zu starten?
Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Berichte lesen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?
Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Warum Valgrind
- Leaks erkennen
- Ungültiger Speicherzugriff
- Berichte lesen