So verwenden Sie Valgrind C ++

So verwenden Sie Valgrind C ++
Valgrind ist ein Detektor des Missmanagements des Gedächtnisses. Wir können über die Speicherlecks und Deallocationsfehler informieren. Es ist ein Code des Mehrzwecks. Es ist auch bekannt, dass es ein Speicherdebugging -Tool für Linux ist. Dieser Detektor hat ein wichtiges Merkmal, Ihr Programm in Valgrinds Speicherumgebung auszuführen und die Verwendung des Speichers zu überwachen. Wenn in einigen Fällen des Schreibens eines Code eine solche Situation auftritt, wenn Sie den noch nicht initiierten Speicher verwenden oder vergessen, den Zeiger zu befreien, werden diese fehlerhaften Effekte von Valgrind erkannt. Dieser Artikel konzentriert sich hauptsächlich auf die Verwendung von Valgrind, um diese Art von Problemen zu erkennen.

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 Valgrind

Dies 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:

  • Speicherplatz wird nicht zugeteilt.
  • Der Zugriff des Speicherraums hat das angegebene Grenze überschritten.
  • Speicherplatz wird wiederholt freigegeben.
  • Die Anwendung des Speicherraums und die Veröffentlichung des Speichers werden nicht übereinstimmen.

Memcheck kann viele Probleme überprüfen, da es die leistungsstärkste Komponente von Valgrind ist.

  • Variablen, die nicht initialisiert werden
  • Ein malloc () mit der Funktionalität von 'Any Free ()' '
  • Heap -Zeiger, der auf einen ungültigen Speicher zugreift.
  • Jetzt werden wir die Arbeit von Valgrind durch einige Beispiele erklären

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.

# enthalten

Hier 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 Datei1
$ Valgrind ./Datei1

Jetzt 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 ./Datei1

Dieser 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++.