Verktøy for å finne en minnelekkasje

Verktøy for å finne en minnelekkasje


Når et dataprogram trenger å lagre informasjon, først må den allokere minne. Etter at dataene er ikke lenger nødvendig, deallokerer programmet minnet slik at et annet program kan gjøre bruk av den. Hvis et program tildeler minne uten deallocating minnet etterpå, vil det programmet bli en belastning på systemressurser. Disse feilene kalles "minnelekkasjer" og bli kvitt dem er en viktig del av feilsøking.

Prosess

Uavhengig av hvilket språk programmet er skrevet i, den grunnleggende prosessen for å finne minnelekkasjer er den samme. Først må minnelekkasje som skal påvises. En minnelekkasje er vanligvis angitt med lineært økende minnebruk, selv om noen spesialiserte verktøy kan fortelle deg direkte hvor mye minne et program har bevilget eller deallocated. Når en minnelekkasje detekteres det må isoleres. Dette gjøres ved å teste hver funksjon eller objekt separat for å bestemme hvor lekkasjen forekommer. Da programmerer må finne ut den spesifikke feilen som forårsaker lekkasjen og rette den.

C / C ++

Programmer skrevet i C og C ++ er beryktet for å ha minnelekkasjer fordi brukeren må manuelt tildele og deallocate minnet ved hjelp av malloc kommandoen. Den ccmalloc verktøyet overvåker malloc funksjonen og rapporterer hva minne ble ikke deallocated ble deallocated flere ganger eller til og med tildelt uten å ha blitt allokert i første omgang. Andre mer spesialiserte programmer som NJAMD ( "Not Just Another malloc Debugger") også eksisterer for å finne minnelekkasjer i C og C ++.

MSDN

Utviklere som bruker Microsofts utviklingsmiljø kan bruke ml kommando for å finne minnelekkasjer. Skrive ml på Cesh teksten vil få opp en liste over hver applikasjon som kjører og hvor mye minne som er i bruk, skrevet som "r / w =" etterfulgt av antall sider som programmet har tildelt. Uventede økning i minnebruk tyde på at programmet har en minnelekkasje.

Java

Mange programmerere tror at Java-programmer er immune mot minnelekkasjer fordi programmereren er ikke ansvarlig for tildeling og deallocating minne, men de har fortsatt dukker opp. Java virtuell maskin, miljø som implementerer Java-programmer, har en automatisk garbage collector at deallokerer minnet når det ikke lenger er referert til av andre klasser. Minnelekkasjer kan oppstå når minnet blir referert når det ikke lenger er nødvendig, slik at den hoppes over av søppel samleren. Jprobe er en debugger som kan ta øyeblikksbilder av minnebruk som et Java-program kjører, hjelpe programmerere å finne kilden til en minnelekkasje.