Läsa rapporter
Tolka utdata.
Läsa rapporter är en gratis lektion i C Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C Academy innehåller totalt 4 lektioner.
En rapports uppbyggnad
En Valgrind-rapport består av tre delar:
- process-ID-prefixet på varje rad
- Ett eller flera felblock allteftersom de uppstår
- En avslutande HEAP and LEAK SUMMARY när programmet avslutas
När du lär dig läsa varje del förvandlas en vägg av text till en exakt att-göra-lista.
PID-prefixet
Varje Valgrind-rad börjar med ==PID==, till exempel ==12345==.
Detta är process-ID:t, inte en del av programmets utskrift. Det gör att du kan skilja Valgrinds meddelanden från programmets printf när båda visas i samma terminal.
==12345== Memcheck, a memory error detector
==12345== Command: ./prog
==12345==Ett exempel på ett felblock
Här är ett verkligt block för en ogiltig skrivning:
==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)
Läs den första raden
Den första raden anger feltyp och storlek: 'Invalid write of size 4'.
Storlek 4 betyder en åtkomst på 4 byte, vanligtvis en int. Den här enda raden talar om vilken typ av fel du kan förvänta dig innan du läser vidare.
Läs stackspårningen
Raden med at är den innersta stackramen, där felet inträffade. Varje rad med by anger en anropare, ett steg upp.
Läs uppifrån och ned, från djupast till ytligast. Den första ramen med din filnamn är nästan alltid platsen för buggen.
==12345== at 0x4005A1: do_work (work.c:12)
==12345== by 0x4006F0: main (main.c:8)Läs adressinformationen
Raden Address ... anger åtkomsten i förhållande till ett känt block:
0 bytes after a block of size 20 alloc'd— spill precis efter slutet4 bytes inside a block of size 4 free'd— användning efter frigöringon thread 1's stack— en stackåtkomst
Den visar även var blocket allokerades eller frigjordes.
HEAP SUMMARY
Vid avslutningen får du en sammanställning av allokeringarna:
==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
'in use at exit' större än noll betyder att något inte frigjordes.
LEAK SUMMARY
Under heap-sammanställningen grupperas minnesläckorna:
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
Lägg till --leak-check=full för att koppla ett stackspår till varje förlorat block.
ERROR SUMMARY
Den allra sista raden räknar samman allt:
ERROR SUMMARY: 2 errors from 2 contexts
En 'context' är en unik felplats. Om en felaktig rad körs en miljon gånger i en loop är det fortfarande en enda kontext. Målet är 0 errors from 0 contexts.
Prioriteringsordning
Arbeta metodiskt igenom rapporten:
- Åtgärda fel med ogiltig åtkomst först; de orsakar korruption
- Åtgärda sedan fel med oinitierade värden
- Åtgärda därefter läckor som är definitely och indirectly lost
- Kör om efter varje åtgärd; en grundorsak löser ofta flera rapporterade fel
Undertrycka känt brus
Vissa fel kommer från bibliotek som du inte kan åtgärda, till exempel C-körmiljön eller en grafikdrivrutin. Generera en suppression-fil för att tysta dessa fel utan att dölja dina egna buggar.
--gen-suppressions=all skriver ut färdiga suppression-poster som du sparar och skickar tillbaka med --suppressions=file.
valgrind --gen-suppressions=all ./prog
valgrind --suppressions=mine.supp ./progSnabbkontroll
Tolka en rad i en rapport.
Sammanfattning
Nu kan du läsa Valgrind-rapporter från början till slut:
==PID==står som prefix på Valgrind-rader och skiljer dem från programmets utskrift- Varje felblock anger typ, storlek, stackspårning och adressinformation
- HEAP/LEAK-sammanställningarna redovisar allokeringar och förlorat minne
- ERROR SUMMARY räknar unika kontexter; sikta på noll
Prioritera åtkomstfel, sedan läckor, och kör om efter hand.
Lär dig C med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 39
- Lektioner
- 144
Vanliga frågor
Är lektionen ”Läsa rapporter” gratis?
Ja – hela texten till ”Läsa rapporter” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Läsa rapporter”?
Tolka utdata. Ni övar på C Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C Academy?
Du behöver inga förkunskaper. Utbildningen i C Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Läsa rapporter”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C Academy-lektionen?
Ja. Varje C Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Varför Valgrind
- Upptäcka läckor
- Ogiltig åtkomst
- Läsa rapporter