Valgrind ist Betriebssystem abhängig, da es nur im Linux -Betriebssystem ausführbar ist. Valgrind ist eine Sammlung von Speichererkennungswerkzeugen, die alle Open Source sind. Es ist weit verbreitet und leistungsfähiger als andere Tools wie Memwatch, Mtrace usw., die die gleichen Funktionen wie Valgrind ausführen. Obwohl C ++ eine sehr leistungsstarke und nützliche Programmiersprache ist, erfordert es viel Macht zum Debuggen und Ausführen. Manchmal treten manchmal Speicherfehler auf, was ein spezifisches Problem darstellt. Ebenso gibt es einen weiteren Fehler, der ein Speicherleck ist. Valgrind ist ein spezifisches Programm, mit dem Sie beide Probleme lösen können.
Valgrind -Installation
Bei der Arbeit an der Linux -Plattform sind viele neue Programme erforderlich, um einige bestimmte Programme auf diesem Betriebssystem auszuführen. Wenn Sie beispielsweise ein Terminal verwenden, benötigen Sie eine SNAP, um viele andere Software -Installationen durchzuführen. In ähnlicher Weise wird Valgrind auch am Terminal unter Verwendung eines Befehls "sudo-apt" installiert.
$ sudo Apt installieren Sie ValgrindDies wird einige Zeit dauern, aber am Ende wird es erfolgreich in Ihrem System installiert.
Einige Anweisungen für die Valgrind -Verwendung
Das zu testende Programm oder die zu testende Anwendung wird über einen Compiler hinzugefügt, der das Programm zusammenstellt. "-G" wird verwendet, da es auch ein Compiler für C ++-Programme ist.
Der resultierende Wert des Erkennungsdatensatzes wird als Ausgabe am Terminal angezeigt. Darüber hinaus kann der resultierende Wert in einer Datei gespeichert werden.
Wenn Sie weitere Anweisungen wünschen oder Hilfe benötigen, um einen bestimmten Befehl zu verwenden.
Wir verwenden ein bestimmtes Format für die Angabe der Erkennung der Lecks im Speicher: # Valgrind -tool = memcheck -Leak -Check = voll ./Datei, -Leak -Check = voll
Prinzip der Valgrind -Gedächtniserkennung
Valgrind verwendet eine virtuelle Umgebung für die Implementierung der Programme. Das Programm oder die Anwendung, die getestet werden sollen. Die Funktion von Valgrind besteht darin, die Anwendung, ihre Verwendung und die Speicherveröffentlichung in Echtzeit zu überwachen und die Informationen, die möglicherweise einige Anomalien im Speicher anzeigen, aufzuzeichnen. In Valgrind gibt es eine Speichererkennungskomponente, Memcheck. Es unterstützt viele Funktionen. Einige von ihnen sind unten aufgeführt:
Memcheck kann viele Probleme überprüfen, da es die leistungsstärkste Komponente von Valgrind ist.
Nicht initialisiertes Gedächtnis
Dieses Problem tritt auf, wenn Sie ein Programm unter Verwendung einer einzelnen Variablen oder eines Arrays schreiben. Und Sie haben vergessen, das Array am Anfang zu deklarieren und zu initialisieren. Und zum Zeitpunkt der Nutzung sind Sie sich dieser Ausgabe des Vergessens nicht bewusst. Dieser Fehler wird durch Valgrind identifiziert. Um das Beispiel zu erklären, haben wir ein Programm in C genommen++.
Der erste Schritt ist die Verwendung der STD -Bibliothek.
# enthaltenHier können Sie erkennen, dass der Wert einer Variablen nicht zugewiesen und dem Array angegeben wird. In ähnlicher Weise werden diese Werte mithilfe einer 'für' Schleife gedruckt. Hier haben wir vergessen, einer Variablen einen Wert zuzuweisen. Der Fehler tritt auf, wenn ein leeres Array entschieden wird, um die Werte anzuzeigen.
Jetzt werden wir diesen Code auf dem Ubuntu -Terminal ausführen. Wir werden einen "G ++" -Kompiler verwenden, um den Code zu kompilieren. Im Gegensatz zu einem einfachen C -Code verwenden wir hier das Schlüsselwort von Valgrinds.
$ gcc -wall -pedantic -g Datei1.c -o Datei1Jetzt bringt dieser Befehl einen Teil aus dem von Speicher genutzten Seite mit der Seite. Zunächst erhalten wir eine Beschreibung über "Memcheck". Dann werden die Details zum nicht initialisierten Wert angezeigt. In diesem Teil können Sie feststellen, dass die Zeilennummer erwähnt wird, wenn ein Fehler aufgetreten ist. Hier ist die Zeilennummer '11'.
Speicherleckerkennung
Angenommen, Sie haben ein Programm, das malloc () no Free () enthält. Dies führt zu einem Speicherleck. Es gibt ein Beispiel für einen C ++ - Quellcode.
Im Hauptprogramm wird ein Zeiger des Charaktertyps mit einer Malloc -Funktion verwendet. Auch ein kleines Programm ist für die Identifizierung von Speicherleckagen verantwortlich. Jetzt werden wir die Ausgabe sehen.
Der Ausgangsinhalt stimmt in einigen Aspekten mit der Ausgabe des vorherigen überein. Daher haben wir nur den Speicherlecksabschnitt angezeigt, um einen vollständigen Fokus zu haben.
Jetzt werden wir den obigen Code kompilieren und ihn über einen Befehl ausführen.
$ Valgrind--tool = memcheck-Leak-Check = Ja-Stack-Origins = Ja ./Datei1Dieser Befehl zeigt die folgenden Ergebnisse an. Sie können hier beobachten, dass die Anzahl der verlorenen Bytes angezeigt wird. Die Zeile, in der der Fehler aufgetreten ist.
Dieses Ergebnis enthält auch die Zusammenfassung der Leckage, in der die gesamten Bytes, die entweder direkt oder indirekt verloren gegangen sind, erklärt. Was auch immer die Beschreibung ist, es wird kurz im Ergebnis erklärt.
Erkennung von ungültiger Speicherzugriffszugriff
Manchmal werden solche Bedingungen auftreten, wenn der Quellcode einen Fehler enthält. Dieser Fehler wird durch Memcheck erkannt.
Ptr [11] = 'z';In diesem oben genannten Code können Sie sehen, dass wir einen Zeiger 'PTR' verwendet haben, der versucht, auf einen Speicherort zuzugreifen, der die Grenze überschreitet.
Die Ausgabe zeigt, dass die Größe ungültig ist. Wie wir eine Reihe von Größe deklariert haben [10]. Und der Zeiger greift auf den Slot von 11 zu, der außerhalb der Reichweite ist, die wir deklariert haben.
Erkennung baumelnder Zeiger Operations
Dies sind jene Zeiger, die auf das Gedächtnis hinweisen, das bereits befreit wird.
Hier haben wir den Raum zuerst frei; Auch nachdem der Speicherplatz befreit wurde, versucht der Code, auf den Speicher zuzugreifen, der von einem Zeiger gezeigt wird.
Abschluss
"Wie man Valgrind C ++ verwendet" wird am Linux -Terminal implementiert. Es umfasst das Grundkonzept, Valgrind -Typen, seine Installation, Anweisung für die Nutzung und einige wichtige Funktionen seiner Komponenten. Memcheck als Hauptkomponente von Valgrind erkennt den Fehler im Programm, unabhängig davon. Alle erwähnten Beispiele zeigen die Arbeit von Valgrind, einschließlich malloc (). Dieser Artikel wird in Bezug++.