Miksi Valgrind
Havaitse muistivirheet.
Miksi Valgrind on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 4 oppituntia.
Mikä Valgrind on
Valgrind on instrumentointikehys, joka suorittaa ohjelmasi synteettisessä suorittimessa ja tarkkailee jokaista muistitoimintoa.
Sen käytetyin työkalu memcheck havaitsee virheet, jotka kaatavat C-ohjelmat vasta tunteja varsinaisen virheen tapahtumisen jälkeen.
- Muistivuodot
- Vapautetun tai alustamattoman muistin käyttö
- Puskurin rajojen ulkopuoliset luku- ja kirjoitusoperaatiot
- Virheellinen
free/ yhteensopimattomat varaus- ja vapautusmekanismit
Miksi C tarvitsee sitä
C-kielessä ei ole roskienkeruuta eikä rajatarkistuksia. Kääntäjä luottaa sinuun täysin.
Puskurin ylivuoto tai unohtunut free kääntyy ongelmitta ja saattaa toimia testauksessa hyvin, mutta myöhemmin vioittaa tietoja tai kaataa ohjelman tuotannossa.
Valgrind tarjoaa turvaverkon, jota kieli ei suostu tarjoamaan.
Vuotava ohjelma
Tämä ohjelma varaa muistia eikä koskaan vapauta sitä. Se kääntyy ja suoritetaan ilman ilmoituksia.
malloc-funktiolla varattu lohko katoaa heti, kun main palaa. Pitkään käynnissä olevassa palvelimessa tuhannet tällaiset lohkot kuluttavat kaiken RAM-muistin.
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int *data = malloc(100 * sizeof(int));
data[0] = 42;
printf("%d\n", data[0]);
return 0; /* forgot free(data) */
}Mitä kääntäjä ei huomaa
Kun suoritat ohjelman komennolla gcc -Wall -Wextra, saat nolla varoitusta.
Kääntäjä päättelee syntaksista ja tyypeistä, ei ajonaikaisesta muistin toiminnasta. Muistivuoto on ajonaikainen tosiasia, joka ei näy käännösaikana.
Juuri tämän aukon Valgrind täyttää.
Miten instrumentointi toimii
Valgrind ei tarvitse lähdekoodiasi tai erityisiä käännösvalitsimia. Se toimii käännetyn binäärin kanssa.
Se kääntää konekoodisi JIT-menetelmällä uudelleen ja lisää tarkistuksia jokaisen luku-, kirjoitus- ja varausoperaation ympärille. Jokaiselle tavulle ylläpidetään varjometatietoja, jotka seuraavat, onko tavu käytettävissä ja määritelty.
Suorittaminen
Peruskutsu tehdään lisäämällä Valgrind normaalin komennon eteen.
--leak-check=full-valitsin pyytää erittelyn jokaisesta vuodosta pinojäljityksineen.
valgrind --leak-check=full ./myprogram arg1 arg2Käännä selkeitä raportteja varten
Valgrind toimii minkä tahansa binäärin kanssa, mutta sen raporteista on paljon enemmän hyötyä debuggaustietojen kanssa.
Käännä ohjelma valitsimella -g, jotta jäljityksissä näkyvät tiedostojen nimet ja rivinumerot raakaosoitteiden sijaan.
-glisää debuggauksen vaatimat tiedot-O0estää optimointien uudelleenjärjestelyt, jotka sekoittavat jäljityksiä
gcc -g -O0 -o myprogram myprogram.cMitä se maksaa
Instrumentointi ei ole ilmaista. memcheck-ohjelman alla suoritettava ohjelma toimii noin 10–50 kertaa hitaammin ja käyttää enemmän muistia.
Tämä sopii testaukseen ja virheenkorjaukseen, mutta tuotantoon ei koskaan toimiteta binääriä, joka suoritetaan Valgrindin alla. Se on kehitystyökalu.
Työkalukokonaisuus
Valgrind on enemmän kuin memcheck. Muut työkalut jakavat saman ytimen:
memcheck— muistivirheet ja vuodot (oletus)cachegrind— välimuistin ja haarautumisten profilointicallgrind— kutsukaavion profilointihelgrind— säikeiden kilpailutilanteiden tunnistusmassif— keon profilointi ajan kuluessa
Milloin sitä kannattaa käyttää
Käytä Valgrindia aina, kun havaitset seuraavaa:
- Salaperäisiä kaatumisia, joiden kohta muuttuu, kun lisäät
printf-kutsun - Muistinkulutusta, joka kasvaa jatkuvasti
- Roska-arvoja, jotka muuttuvat suorituskertojen välillä
- Kaatumisia, jotka ilmenevät vain joillakin syötteillä tai alustoilla
Nämä ovat muistiin liittyvän määrittelemättömän toiminnan tyypillisiä tunnusmerkkejä.
Tunnettavat rajoitukset
Valgrind on tehokas, mutta ei kaikkitietävä:
- Se ei löydä virheitä koodipoluista, joita testi ei suorita
- Pino- ja globaalien muuttujien ylivuodot havaitaan epäluotettavammin kuin keon ylivuodot
- Se on hidas, joten se ei sovellu reaaliaikaisiin työkuormiin
Yhdistä se pehmentäjiin ja testeihin, jotta kattavuus on mahdollisimman hyvä.
Pikatesti
Testaa, miten hyvin ymmärrät Valgrindin vaatimukset.
Kertaus
Nyt tiedät, mikä Valgrind on ja miksi C tarvitsee sitä:
- C ei tarjoa automaattista muistiturvallisuutta, joten ajonaikaiset virheet voivat ohittaa kääntäjän
- Valgrind instrumentoi binäärin ja seuraa jokaista muistin käyttöä
memcheckhavaitsee vuodot, virheelliset käytöt ja alustamattoman muistin lukemiset- Käännä valitsimilla
-g -O0, jotta raportit ovat selkeitä; varaudu huomattavaan hidastumiseen
Seuraavaksi havaitset todelliset muistivuodot memcheckillä.
Opi C tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 39
- Oppitunnit
- 144
Usein kysytyt kysymykset
Onko oppitunti ”Miksi Valgrind” ilmainen?
Kyllä – oppitunnin ”Miksi Valgrind” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Miksi Valgrind”?
Havaitse muistivirheet. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Miksi Valgrind”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?
Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.