Grundlæggende om Valgrind
Find leaks og fejl
Grundlæggende om Valgrind er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad er Valgrind
Valgrind er et instrumenteringsrammeværk. Standardværktøjet Memcheck registrerer hukommelseslækager og -fejl uden omkompilering ved at køre programmet på en simuleret CPU.
Kørsel af Memcheck
Start dit program via Valgrind. Byg først med -g for at få linjenumre.
g++ -g main.cpp -o app
valgrind --leak-check=full ./appRegistrering af lækager
Memcheck rapporterer hukommelse, der stadig er allokeret ved afslutningen, og klassificerer den som definitivt tabt, indirekte tabt eller stadig tilgængelig.
#include <cstdlib>
int main() {
int* p = (int*)malloc(40); // never freed -> definitely lost
return 0;
}Lækagekategorier
Forstå rapportens kategorier.
- Definitivt tabt: ingen pointer er tilbage; en reel lækage
- Indirekte tabt: kan kun nås via en tabt blok
- Stadig tilgængelig: en pointer findes ved afslutningen (ofte ufarligt)
Ugyldige læsninger og skrivninger
Memcheck registrerer adgang til ikke-allokeret eller frigivet hukommelse og rapporterer adressen og størrelsen.
#include <cstdlib>
int main() {
int* a = (int*)malloc(2 * sizeof(int));
a[5] = 1; // invalid write past the block
free(a);
return 0;
}Ikke-initialiserede værdier
Memcheck advarer, når en betingelse eller et resultat afhænger af en ikke-initialiseret værdi, hvilket ofte er en kilde til ikke-deterministiske fejl.
#include <iostream>
int main() {
int x; // uninitialized
if (x == 42) // use of uninitialized value
std::cout << "hi\n";
return 0;
}Læsning af outputtet
Hver fejlblok viser handlingen, det fejlbehæftede stakspor og (for heap-blokke) hvor hukommelsen blev allokeret. HEAP SUMMARY summerer allokeringer og lækager.
Nyttige flag
Almindelige indstillinger:
--leak-check=full: detaljer om hver lækage--show-leak-kinds=all--track-origins=yes: spor ikke-initialiserede værdier tilbage til deres kilde--error-exitcode=1: få CI til at fejle ved fejl
Valgrind sammenlignet med ASan
Begge finder hukommelsesfejl, men med forskellige afvejninger.
- Valgrind: kræver ingen omkompilering, er langsommere (10-50 gange) og er god til at finde ikke-initialiserede læsninger
- ASan: kræver omkompilering, er meget hurtigere og er bedre til at registrere stakoverløb
Undertrykkelse af kendte problemer
Tredjepartsbiblioteker kan skabe støj. Generér og anvend en undertrykkelsesfil med --gen-suppressions=all og --suppressions=file for at skjule kendte, ufarlige rapporter.
Hvornår skal du bruge Valgrind
Brug Valgrind, når du ikke kan omkompilere med sanitizere, har brug for præcis sporing af ikke-initialiserede værdier eller ønsker en ekstra vurdering. Ellers er ASan normalt hurtigere til almindelig CI.
Hurtigt tjek
Husk lækagekategorierne.
Opsummering
Du har lært det grundlæggende om Valgrind.
- Memcheck finder lækager, ugyldig adgang og ikke-initialiserede læsninger uden omkompilering
- Kør med
--leak-check=full --track-origins=yes - Lækagetyper: definitivt eller indirekte tabt, stadig tilgængelig
- Langsommere end ASan, men fremragende til fejl med ikke-initialiserede værdier
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Grundlæggende om Valgrind” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Grundlæggende om Valgrind”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Grundlæggende om Valgrind”?
Find leaks og fejl Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Grundlæggende om Valgrind”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Brug af gdb og lldb
- AddressSanitizer
- UBSan og TSan
- Grundlæggende om Valgrind