Hvordan bruke valgrind C ++

Hvordan bruke valgrind C ++
VALGRIND er en detektor for feilstyring av minne. Vi kan vite om minnelekkasjene og deallokasjonsfeilene. Det er en kode for flerbruk. Det er også kjent for å være et memory -feilsøkingsverktøy for Linux. Denne detektoren har en viktig funksjon ved å kjøre programmet ditt i Valgrinds minnemiljø og overvåker også bruken av minne. Hvis en slik situasjon i noen tilfeller av å skrive en kode oppstår når du bruker minnet som ikke er initialisert ennå, eller du glemmer å frigjøre pekeren, blir disse feilfremkallende effektene oppdaget av valgrind. Denne artikkelen vil hovedsakelig fokusere på bruken av Valgrind for å oppdage disse slags problemer.

VALGRIND er operativsystemavhengig, da det bare kan kjøres på Linux -operativsystemet. VALGRIND er en samling av minnedeteksjonsverktøy som alle er åpen kildekode. Den er mye brukt og kraftigere enn andre verktøy som Memwatch, Mtrace, etc., som utfører de samme funksjonene som valgrind. Selv om C ++ er et veldig kraftig og nyttig programmeringsspråk, krever det mye kraft for feilsøking og utførelse. Noen ganger oppstår noen ganger minnefeil, noe som er et spesifikt problem. Tilsvarende eksisterer det en annen feil som er en minnelekkasje. Valgrind er et spesifikt program som hjelper deg å løse begge problemene.

VALGRIND -installasjon

Når du jobber med Linux -plattformen, er det nødvendig med mange nye programmer for å utføre noen spesielle programmer på det operativsystemet. For eksempel, mens du bruker en terminal, trenger du et snap, egnet til å utføre mange andre programvareinstallasjoner. Tilsvarende er Valgrind også installert på terminalen ved å bruke en 'sudo-apt' -kommando.

$ sudo apt install valgrind

Dette vil ta litt tid, men til slutt er det installert på systemet ditt.

Noen instruksjoner for valgrindbruken

Programmet eller applikasjonen som skal testes blir lagt til gjennom en kompilator som kompilerer programmet. “-G” brukes da det også er en kompilator for C ++ -programmer.

Den resulterende verdien av deteksjonsoppføringen vises som en utgang på terminalen. I tillegg til dette, kan den resulterende verdien lagres i en fil.

Hvis du vil ha flere instruksjoner eller trenger litt hjelp til å bruke noen spesifikke kommandoer, kan du utføre valgrind -h, og gi deg et grensesnitt av hjelpterminalen.

Vi bruker et spesifikt format for indikasjon på deteksjon av lekkasjene i minnet: # VALGRIND -TOOL = MEMCHECK -LEAK -CHECK = FULL ./fil, -LEAK -CHECK = FULL

Prinsippet om valgrind minnedeteksjon

Valgrind bruker et virtuelt miljø for implementering av programmene. Programmet eller applikasjonen som skal testes kjører på dette tilnærmet skapte miljøet. Valgrinds funksjon er å overvåke applikasjonen, bruken av den og minneutgivelsen i sanntid og også registrere informasjonen som kan vise noen abnormiteter i minnet. I Valgrind er det en minnedeteksjonskomponent, Memcheck. Det støtter mange funksjoner. Noen av dem er listet opp nedenfor:

  • Minneområdet er ikke tildelt.
  • Tilgang til minneområdet overskred den gitte grensen.
  • Minneområdet slippes gjentatte ganger.
  • Bruken av minneplass og frigjøring av minnet samsvares ikke.

Memcheck kan sjekke mange problemer, da det er den kraftigste komponenten i Valgrind.

  • Variabler som ikke er initialisert
  • En malloc () med funksjonaliteten til 'hvilken som helst gratis ()'
  • Heappeker som får tilgang til ugyldig minne.
  • Nå skal vi forklare Valgrind gjennom noen eksempler gjennom noen eksempler

Uinitialisert minne

Dette problemet oppstår når du skriver et program med bruk av en enkelt variabel eller matrise. Og du glemte å erklære og initialisere matrisen i starten. Og på brukstidspunktet er du ikke godt klar over dette problemet med å glemme. Denne feilen er identifisert av Valgrind. For å forklare eksemplet har vi tatt et program i C++.

Første trinn er å bruke STD -biblioteket.

# inkluderer

Her kan du se at verdien av en variabel ikke er tildelt og gis til matrisen, og på samme måte skrives disse verdiene ut ved å bruke en 'for' loop. Her glemte vi å tildele en verdi til en variabel. Feilen vil oppstå når en tom matrise er valgt å vise verdiene.

Nå skal vi utføre denne koden på Ubuntu -terminalen. Vi vil bruke en 'G ++' -kompilator for å kompilere koden. I motsetning til enkel C -kode, vil vi her bruke nøkkelordet til 'Valgrind's.

$ gcc -wall -pedantic -g file1.C -o File1
$ Valgrind ./fil1

Nå vil denne kommandoen bringe en del fra minnet brukt side. Først får vi en beskrivelse av 'Memcheck'. Deretter vises detaljene om den uinitialiserte verdien. I denne delen kan du se at linjenummeret er nevnt der det har oppstått en feil. Her er linjenummeret '11'.

Minnelekkasjens deteksjon

Anta at du har et program som inneholder Malloc () ingen gratis (). Dette vil føre til en minnelekkasje. Det er et eksempel på en C ++ kildekode.

I hovedprogrammet brukes en peker av karaktertype med en Malloc -funksjon. Selv et lite program er også ansvarlig for identifisering av hukommelse. Nå ser vi utdataene.

Utgangsinnholdet samsvarer med utgangen fra det forrige i noen aspekter, så vi har bare vist minnelekkasjen for å ha fullstendig fokus.

Nå vil vi samle koden ovenfor og utføre den gjennom en kommando.

$ VALGRIND--TOOL = MEMCHECK-LEAK-SCHECK = JA-TRACK-ORIGINS = JA ./fil1

Denne kommandoen vil vise følgende resultater. Du kan her observere at antall byte som går tapt vises. Linjen der feilen har oppstått vises også i den siste linjen for de resulterende verdiene.

Dette resultatet inneholder også sammendraget av lekkasje, som forklarer totale byte som er tapt enten direkte eller indirekte; Uansett hva beskrivelsen er, forklares det kort i resultatet.

Ugyldig deteksjon av minnetilgang

Noen ganger oppstår slike forhold når kildekoden inneholder en feil, pekeren vi bruker for å få tilgang til ut fra bundet minneplassering. Denne feilen blir oppdaget av Memcheck.

Ptr [11] = 'z';

I denne ovennevnte koden kan du se at vi har brukt en peker 'PTR' som prøver å få tilgang til et minneplass som overstiger grensen.

Utgangen viser at størrelsen er ugyldig. Som vi har erklært en rekke størrelser [10]. Og pekeren får tilgang til sporet på 11, som er utenfor rekkevidden vi har erklært.

Dinglingpeker operasjonsdeteksjon

Dette er de pekerne som peker på minnet som allerede er frigjort.

Her har vi først frigjør plassen; Selv etter at plassen er frigjort, prøver koden å få tilgang til minnet, som er pekt av en peker.

Konklusjon

'Hvordan bruke Valgrind C ++' implementeres på Linux -terminalen. Det omfatter det grunnleggende konseptet, valgrind -typer, dets installasjon, instruksjon for bruk og noen viktige funksjoner av komponentene. Memcheck, som hovedkomponenten i Valgrind, oppdager feilen i programmet, enten det er tilfelle av minnelekkasje eller uinitialisert minne. Alle nevnte eksempler viser arbeidet med Valgrind, inkludert Malloc (). Denne artikkelen vil være gunstig når det gjelder arbeid og prinsipper for valgrind i programmeringsmiljøet til C++.