valgrind - description - title tag länge



Wie funktioniert Valgrind? (4)

Hier finden Sie einige schöne Informationen:

Machen Sie sich mit LD_PRELOAD vertraut.

Kann jemand eine schnelle Erklärung auf höchster Ebene geben, wie Valgrind funktioniert? Ein Beispiel: Woher weiß es, wann Speicher zugewiesen und freigegeben wird?


Answer #1

Valgrind führt Ihre Anwendung im Grunde in einer "Sandbox" aus. Während es in dieser Sandbox ausgeführt wird, kann es eigene Anweisungen einfügen, um erweitertes Debugging und Profiling durchzuführen.

Aus dem Handbuch:

Ihr Programm wird dann auf einer synthetischen CPU ausgeführt, die vom Valgrind-Kern bereitgestellt wird. Wenn der neue Code zum ersten Mal ausgeführt wird, übergibt der Kern den Code an das ausgewählte Werkzeug. Das Tool fügt seinen eigenen Instrumentierungscode hinzu und übergibt das Ergebnis an den Kern, der die fortgesetzte Ausführung dieses instrumentierten Codes koordiniert.

Im Grunde bietet Valgrind einen virtuellen Prozessor, der Ihre Anwendung ausführt. Bevor Ihre Anwendungsanweisungen verarbeitet werden, werden sie jedoch an Tools (z. B. memcheck) übergeben. Diese Tools ähneln Plugins und können Ihre Anwendung ändern, bevor sie auf dem Prozessor ausgeführt wird.

Das Tolle an diesem Ansatz ist, dass Sie Ihr Programm nicht ändern oder neu verknüpfen müssen, um es in valgrind auszuführen. Es führt dazu, dass Ihr Programm langsamer läuft, Valgrind ist jedoch nicht dazu gedacht, die Leistung zu messen oder während der normalen Ausführung Ihrer Anwendung zu laufen, daher ist dies kein Problem.


Answer #2

Valgrind ist im Grunde eine virtuelle Maschine , die Ihr Programm ausführt. Es ist eine virtuelle Architektur, die jeden Aufruf zum Zuweisen / Freigeben von Speicher abfängt.


Answer #3

valgrind befindet sich als eine Schicht zwischen Ihrem Programm und dem Betriebssystem und fängt Aufrufe an das OS ab, die Speicherzuweisung anfordern und aufzeichnen, was manipuliert wird, bevor dann der Speicher tatsächlich zugewiesen und ein Äquivalent zurückgegeben wird. Es ist im Wesentlichen, wie die meisten Code-Profiler arbeiten, außer auf einer viel niedrigeren Ebene (Systemaufrufe statt Programmfunktionsaufrufe).