2010-02-23 5 views
6

Ich verwende einen Daemon in Linux und ich möchte diesen Daemon unter valgrind ausführen, um speicherbezogene Fehler zu finden. Da es sich um einen Daemon handelt, muss ich die Option verwenden, aber dadurch werden viele Prozesse später während ihrer Lebensdauer erzeugt und ich möchte nicht, dass sie unter valgrind ausgeführt werden. Gibt es eine Möglichkeit, bestimmte Kinder davon abzuhalten, unter Valgrind zu laufen?Wie können bestimmte untergeordnete Prozesse ausgeschlossen werden, um unter Valgrind ausgeführt zu werden?

Antwort

5

Die derzeit veröffentlichte Version (Valgrind 3.5.0) hat keine Option, einige, aber nicht alle untergeordneten Elemente zu verfolgen. Allerdings, wenn Sie bereit sind, the latest code from the SVN repository zu verwenden, es enthält eine new option--trace-children-skip zu diesem Zweck:

--trace-children-skip=patt1,patt2

Diese Option ist nur einen Effekt hat, wenn --trace-children=yes angegeben ist. Es ermöglicht, dass einige Kinder übersprungen werden. Die Option verwendet eine durch Kommas getrennte Liste von Mustern für die Namen ausführbarer Child-Dateien, die Valgrind nicht nachverfolgen sollte. Muster können die Metazeichen ? und * enthalten, die die übliche Bedeutung haben.

Dies kann nützlich sein, um uninteressante Zweige aus einem Baum von Prozessen zu entfernen, die auf Valgrind ausgeführt werden. Aber Sie sollten vorsichtig sein, wenn Sie es verwenden. Wenn Valgrind die Verfolgung in eine ausführbare Datei überspringt, wird nicht nur die Ablaufverfolgung dieser ausführbaren Datei übersprungen, sondern es werden auch alle untergeordneten Prozesse dieser ausführbaren Datei übersprungen. Mit anderen Worten, das Flag bewirkt nicht nur, dass die Ablaufverfolgung bei den angegebenen ausführbaren Dateien stoppt - es überspringt die Verfolgung von ganzen Prozess-Teilbäumen, die in irgendeinem der angegebenen ausführbaren Dateien verwurzelt sind.

Die ältere Methode ist --trace-children=yes wegzulassen, und für die Kinder, die Sie verfolgen möchten, ersetzen Sie sie mit einem trivialen Skript, das das reale Programm unter valgrind läuft:

#!/bin/sh 
exec valgrind --log-file=myprog.vg.%p myprog-real "[email protected]" 

Auch bei Die neue Option, diese Art von Skript kann nützlich sein, wenn Sie z ein Enkelkind, das du unter valgrind verfolgen willst, aber seine Eltern überspringen willst.

+0

Mark, danke für die Antwort. Aber ich fand einen leichteren Weg! Es gibt eine Option --trace-children-skip, die genau das tut, was ich wollte. Es ist nur in Svn Trunk, keine Release-Version verfügbar. "--trace-kinder-überspringen = */sed, */expr, */xgcc, */Katze, */rm, */stty" – kumar

+0

Cool! Ich benutze den anderen Weg seit Jahren; Es ist schön zu sehen, dass dies hinzugefügt wird. Ich habe diese Information zu der Antwort hinzugefügt. – mark4o