Valgrind macOs und Fehler Syscall param msg-desc.port.name zeigt auf nicht initialisierte Byte (s)

9

Ich habe versucht, Valgrind 3.13 und 3.14 (auf MacOs 10.12.6) in einem sehr einfachen Projekt zu starten, aber ich habe einen seltsamen Fehler, den ich nie zuvor in meinem Linux bekommen habe.

  1. Sehr einfaches C-Programm main.c :

    %Vor%
  2. Zusammenstellung mit cc :

    %Vor%
  3. Führen Sie mein einfaches Programm mit valgrind :

    aus %Vor%
  4. Ausgabe von valgrind:

    %Vor%

    Ich verstehe diesen Teil der Spur nicht:

    %Vor%

Ich verstehe nicht, warum die Zusammenfassung des Heapspeichers so groß ist (178 Allocs, 16 Frees, 24288 Bytes, die zugewiesen wurden) meiner einfachen Rückgabe (0); Programm.

    
Sacha Ifrah 23.07.2017, 21:33
quelle

2 Antworten

2

Valgrind verfügt über ein System zur Fehlerunterdrückung. Unterdrückungsregeln sind in speziellen Dateien angegeben, zum Beispiel $PREFIX/lib/valgrind/default.supp . Benutzer können ihre eigenen Regeln mit Hilfe der --gen-suppressions=full aid erstellen, die für jeden gefundenen Fehler eine Unterdrückungsregel ausgibt. Der Benutzer kann es dann an seine eigenen Bedürfnisse anpassen.

Ich habe das für den fraglichen Fehler gemacht, und es funktioniert großartig! Keine Notwendigkeit, instabile Versionen zu installieren. Dies ist auch ein gutes Werkzeug im Gürtel, wenn Sie auf andere gemeldete Fehler stoßen, die Sie ignorieren möchten.

Ich habe diese Datei als ~/.valgrind.supp gespeichert.

%Vor%

# startet einen Kommentar und {} kennzeichnet eine Regel. Die erste Zeile ist der Name der Regel. Die zweite sagt, welches Werkzeug und welcher Fehlertyp unterdrückt werden soll. Param bedeutet ungültiger Syscall-Parameter, und die nächste Zeile gibt den Parameter an, für den Fehler unterdrückt werden sollen. Die folgenden Zeilen, beginnend mit fun: , bedeuten, dass diese Unterdrückungsregel nur in mach_msg_trap gilt, wenn sie von mach_msg aufgerufen wird und von task_set_special_port aufgerufen wird. Auf diese Weise unterdrücken wir nur den Fehler in diesem sehr speziellen Fall, in dem Valgrind die libtrace-Initialisierung für einen Fehler vereitelt.

Valgrind verwendet diese Regel, wenn Sie das Argument --suppressions=$HOME/.valgrind.supp in der Befehlszeile angeben oder in $VALGRIND_OPTS oder ~/.valgrindrc einfügen.

jacwah 12.11.2017 22:16
quelle
1

Ich habe gerade den Fehlerstatus hier überprüft und es scheint gelöst zu sein , also habe ich gerade das entsprechende Commit ausgecheckt und kompiliert. Es löst das Problem der nicht initialisierten Bytes, verursacht aber neue Probleme: unbehandeltes MACH_SEND_TRAILER?

1) Klon-Master-Zweig

%Vor%

2) patchen Sie es mit dem Fix:

%Vor%

3) konfigurieren Sie kompilieren und installieren Sie wie gewohnt, Anweisungen hier

4) testen Sie es mit einem einfachen Programm

%Vor%

Derselbe Test, der unter Linux Ubuntu 16.04 mit valgrind 3.11.0 durchgeführt wurde, liefert eine saubere Ausgabe.

    
user2098740 11.09.2017 14:25
quelle

Tags und Links