Jak używać Valgrind C ++

Jak używać Valgrind C ++
Valgrind jest detektorem niewłaściwego zarządzania pamięcią. Możemy wiedzieć o wyciekach pamięci i błędach dealLocation. Jest to kod wielofunkcyjny. Wiadomo również, że jest to narzędzie do debugowania pamięci dla Linux. Ten detektor ma ważną funkcję uruchamiania programu w środowisku pamięci Valgrind, a także monitoruje użycie pamięci. Jeśli w niektórych przypadkach pisania kodu, taka sytuacja występuje, gdy używasz pamięci, która nie jest jeszcze inicjowana, lub zapominasz o uwolnieniu wskaźnika, te efekty powodujące błędy są wykrywane przez Valgrind. Ten artykuł skupi się głównie na wykorzystaniu Valgrind w celu wykrycia tego rodzaju problemów.

Valgrind jest zależny od systemu operacyjnego, ponieważ można go wykonywać tylko w systemie operacyjnym Linux. Valgrind to zbiór narzędzi do wykrywania pamięci, które są open source. Jest powszechnie używany i mocniejszy niż inne narzędzia, takie jak Memwatch, MTRACE itp., które wykonują te same funkcje co Valgrind. Chociaż C ++ jest bardzo potężnym i użytecznym językiem programowania, wymaga dużej mocy do debugowania i wykonania. Czasami występują błędy pamięci, co jest konkretnym problemem. Podobnie istnieje inny błąd, który jest wyciekiem pamięci. Valgrind to konkretny program, który pomaga rozwiązać oba problemy.

Instalacja Valgrind

Podczas pracy nad platformą Linux potrzebnych jest wiele nowych programów do wykonania niektórych konkretnych programów w tym systemie operacyjnym. Na przykład, korzystając z terminalu, potrzebujesz SNAP, APT, aby przeprowadzić wiele innych instalacji oprogramowania. Podobnie ValGrind jest również instalowany na terminalu za pomocą polecenia „sudo-apt”.

$ sudo apt Zainstaluj valgrind

Zajmie to trochę czasu, ale ostatecznie jest pomyślnie zainstalowany w twoim systemie.

Niektóre instrukcje dotyczące użycia Valgrind

Program lub aplikacja, która ma zostać przetestowana, jest dodawany przez kompilator, który kompiluje program. „-G” jest używane, ponieważ jest również kompilatorem programów C ++.

Wynikająca wartość rekordu wykrywania jest wyświetlana jako wyjście na terminalu. Oprócz tego wynikowa wartość można zapisać w pliku.

Jeśli chcesz więcej instrukcji lub potrzebujesz pomocy w użyciu określonego polecenia, możesz wykonać Valgrind -H, co daje interfejs terminali pomocy.

Używamy określonego formatu do wskazania wykrywania wycieków w pamięci: # Valgrind -tool = memCheck -leak -CHeck = pełny ./plik, -leak -creck = pełny

Zasada wykrywania pamięci Valgrind

Valgrind używa środowiska wirtualnego do wdrażania programów. Program lub aplikacja, która ma zostać przetestowana w tym praktycznie utworzonym środowisku. Funkcją Valgrind jest monitorowanie aplikacji, jej użycia i wydania pamięci w czasie rzeczywistym, a także rejestrowanie informacji, które mogą pokazać pewne nieprawidłowości w pamięci. W Valgrind istnieje komponent wykrywania pamięci, memCheck. Obsługuje wiele funkcji. Niektóre z nich są wymienione poniżej:

  • Nie przydzielono przestrzeni pamięci.
  • Dostęp do przestrzeni pamięci przekroczył dany limit.
  • Przestrzeń pamięci jest uwalniana wielokrotnie.
  • Zastosowanie przestrzeni pamięci i wydanie pamięci nie są dopasowane.

Memcheck może sprawdzić wiele problemów, ponieważ jest to najpotężniejszy element Valgrind.

  • Zmienne, które nie są inicjowane
  • Malloc () z funkcjonalnością „dowolnego free ()”
  • Wskaźnik sterty, który uzyskuje dostęp do nieprawidłowej pamięci.
  • Teraz wyjaśnimy działanie Valgrind za pomocą niektórych przykładów

Niezainteresowane pamięć

Ten problem występuje podczas pisania programu przy użyciu dowolnej pojedynczej zmiennej lub tablicy. I zapomniałeś zadeklarować i zainicjować tablicę na początku. I w momencie użycia nie jesteś świadomy tego problemu zapominania. Ten błąd jest identyfikowany przez Valgrind. Aby wyjaśnić przykład, wzięliśmy program w C++.

Pierwszym krokiem jest użycie biblioteki STD.

# włączać

Tutaj widać, że wartość zmiennej nie jest przypisana i jest podawana do tablicy, i podobnie wartości te są drukowane za pomocą „for Loop”. Tutaj zapomnieliśmy przypisać wartość do zmiennej. Błąd wystąpił, gdy pusta tablica zostanie wybrana do wyświetlania wartości.

Teraz wykonamy ten kod na terminalu Ubuntu. Użyjemy kompilatora „G ++” do skompilowania kodu. W przeciwieństwie do prostego kodu C, tutaj użyjemy słowa kluczowego „Valgrind's.

$ gcc -Wall -pedantic -g plik 1.plik C -O1
$ Valgrind ./File1

Teraz to polecenie przyniesie część ze strony z pamięcią. Najpierw otrzymamy opis „memCheck”. Następnie pokazano szczegóły dotyczące niezainicjowanej wartości. W tej części widać, że numer linii jest wspomniany, gdzie wystąpił błąd. Tutaj numer linii to „11”.

Wykrywanie wycieków pamięci

Załóżmy, że masz program zawierający Malloc () No Free (). To doprowadzi do wycieku pamięci. Istnieje przykład kodu źródłowego C ++.

W programie głównym wskaźnik typu znaków jest używany z funkcją Malloc. Nawet niewielki program jest również odpowiedzialny za identyfikację wycieków pamięci. Teraz zobaczymy wyjście.

Treść wyjściowa pasuje do wyjścia poprzedniego w niektórych aspektach, więc wyświetliliśmy tylko część wycieków pamięci, aby całkowicie się skupić.

Teraz skompilujemy powyższy kod i wykonamy go za pośrednictwem polecenia.

$ ValGrind--tool = memCheck-leak-check = tak --Track-origins = tak ./File1

To polecenie pokaże następujące wyniki. Możesz tutaj zauważyć, że wyświetlane są liczby bajtów, które zostały utracone. Linia, w której wystąpił błąd, jest również wyświetlana w ostatnim wierszu wynikowych wartości.

Wynik ten zawiera również podsumowanie wycieku, które wyjaśnia całkowite bajty utracone bezpośrednio lub pośrednio; Niezależnie od opisu, wyjaśniono go krótko w wyniku.

Nieprawidłowe wykrywanie dostępu do pamięci

Czasami takie warunki są napotykane, gdy kod źródłowy zawiera błąd, wskaźnik, którego używamy do dostępu poza lokalizacją pamięci. Ten błąd jest wykrywany przez MemCheck.

Ptr [11] = „z”;

W tym wyżej wymienionym kodzie widać, że użyliśmy wskaźnika „PTR”, który próbuje uzyskać dostęp do lokalizacji pamięci, która przekracza granicę.

Wyjście pokazuje, że rozmiar jest nieprawidłowy. Jak ogłosiliśmy szereg wielkości [10]. A wskaźnik uzyskuje dostęp do gniazda 11, który jest poza zasięgiem, który zadeklarowaliśmy.

Wiszące wskaźniki wykrywania operacji

To są te wskazówki, które wskazują na zwolnioną pamięć.

Tutaj najpierw uwolnimy przestrzeń; Nawet po uwolnieniu przestrzeni kod próbuje uzyskać dostęp do pamięci, którą wskazuje wskaźnik.

Wniosek

„Jak używać Valgrind C ++” jest zaimplementowany na terminalu Linux. Obejmuje podstawową koncepcję, typy valgrind, jego instalację, instrukcje użytkowania i niektóre główne funkcje jego komponentów. Memcheck, jako główny składnik Valgrind, wykrywa błąd w programie, niezależnie od tego, czy jest tak. Wszystkie wspomniane przykłady pokazują działanie Valgrind, w tym Malloc (). Ten artykuł będzie korzystny w odniesieniu do pracy i zasad Valgrind w środowisku programowania C++.