2016-05-07 8 views
3

Guten Tag!Valgrind auf FreeBSD

Ich spiele ein C-Projekt. Es befindet sich auf FreeBSD-Rechner (es sieht aus wie Himbeere PE2, nicht sicher)

enter image description here

Das Problem ist, ich Projekt in Valgrind ausgeführt werden soll Speicherlecks zu finden. Wenn ich versuche, Valgrind über die Ports zu installieren, erhalte ich beim nächsten Fehler:

[email protected]:/usr/ports/devel/valgrind # make 
===> valgrind-3.10.1.20160113,1 is only for i386 amd64, while you are running 
armv6. 
*** Error code 1 

Stop. 
make: stopped in /usr/ports/devel/valgrind 

Bitte helfen valgrind auf dieser Plattform zu laufen.

Antwort

6

Die Kombination ARM6/FreeBSD wird nicht unterstützt.

Das Valgrind-Team doesn't support FreeBSD at all und die Leute, die die FreeBSD port pflegen, haben es auf i386 und AMD64 beschränkt, weil dies die aktuellen Tier 1-Architekturen sind.

Bei einer Schätzung wird die Valgrind-Unterstützung für ARM erst implementiert, wenn ARM eine Tier 1-Plattform wird oder bis jemand die Portierung vornimmt.

Siehe auch die Erklärung der Valgrind Team an der Portierung:

Maintaining each port takes a lot of effort, more so than for most other programs. Valgrind is fragile due to the low-level nature of what it does. Also, each platform port has CPU-specific code, OS-specific code and platform-specific code, and testing all the combinations is difficult.

Update:

Auf FreeBSD Sie das sehr leistungsstarke dtrace Werkzeug für die Leistungsüberwachung und Fehlersuche verwenden können. Es hat jedoch eine steile Lernkurve.

Mein bevorzugtes Debugging-Tool platziert immer noch printf() in strategischen Standorten. Angenommen, Sie vermuten, dass Ihr Programm in einem großen Codeblock abstürzt. Setzen Sie eine printf in der Mitte, neu kompilieren und erneut ausführen. Wenn Sie die Ausgabe sehen, kam der Fehler nach printf. Wenn Sie es nicht tun, war es vor der printf. Sie haben nun die Größe des Blocks, der den Fehler enthält, halbiert. Fügen Sie nun einen weiteren printf in der Mitte des verbleibenden verdächtigen Codes hinzu und wiederholen Sie den Vorgang. Diese Technik wird Bisektion genannt. Sie können es auch verwenden, um den Wert einer Variablen zu überwachen.

Ich würde vorschlagen, das Debugging printf in einem Makro ([1], [2]) zu wickeln, so können Sie sie im Code lassen, aber Sie können sie für einen Release-Build deaktivieren.

+0

Vielen Dank für Ihre Antwort. Welche Möglichkeiten gibt es also, Programme in C-Sprache (außer 'gdb') auf FreeBSD/ARM zu debuggen? –

+0

@ GeorgeGaál Siehe aktualisierte Antwort. –