Hvordan finne en minnelekkasje i Linux

Hvordan finne en minnelekkasje i Linux


I motsetning til nyere programmeringsspråk som Java og Python, programmeringsspråk som C kreve programmerer for å administrere sin egen hukommelse. C gir fasiliteter for å be om ledig minne og returnere den til operativsystemet, men ingenting mer. Fordi språk som C tilbyr ingen søppelrydding mekanisme for å rense ut objekter som ikke lenger er i bruk, må programmereren være årvåken og fjerne gjenstander når de ikke lenger er nødvendig. Hvis et program ikke kvitte seg med sine ubrukte objekter, kan den resulterende minnelekkasje føre til at operativsystemet krasjer.

Bruksanvisning

1 Installer "Valgrind" debugging suite.

Den Valgrind pakken er fritt tilgjengelig på alle Linux-distribusjoner. For å installere det på Debian-avledede distribusjoner som Ubuntu, skriv "sudo apt-get install Valgrind." På RedHat eller Fedora, skriv "sudo yum install Valgrind."

2 Kompilere programmet med debugging symboler.

Den vanligste kompilator for C-programmer på Linux-systemer er gcc. Bruk "-g" flagget for å instruere gcc å inkludere debugging symboler i det binære at det skaper. (Debugging symboler er nødvendig for feilsøkings som Valgrind å referere til spesifikke problemer i koden).

Hvis du har et C-program som heter "memoryhog.c." for eksempel, ville du kompilere den ved hjelp av denne kommandoen: gcc -g memoryhog.c

3 Kjør programmet binære gjennom Valgrind.

Med mindre du forteller det ellers vil gcc navnet ditt program "a.out." Å kjøre binær heter "a.out" ved hjelp Valgrind skriver denne kommandoen: Valgrind --leak-check = fullt --show-nås = yes ./a.out

4 Inspiser utgangen av Valgrind.

Hvis alle minnelekkasjer har blitt løst, melder Valgrind "Alle heap blokker ble løslatt - ingen lekkasjer er mulig."

Hvis noen minnelekkasjer er til stede, viser Valgrind linjenummeret der lekkasjen er opprettet.

Hint

  • Hvis du er villig til å installere minne-debugging kroker i koden din, så mtrace verktøyet kan tilby funksjoner som ligner på Valgrind.
  • Minnelekkasjer utgjør bare en klasse av programmeringsfeil. Koden kan være fri for minnelekkasjer mens de fortsatt lider av ytelsesproblemer eller sikkerhetsproblemer.