2013-10-08 9 views
15

Ich laufe Valgrind in einem Bash-Skript und richte die Ausgabe des Valgrind auf eine Datei. Wie folgt aus:Wie komme ich ins Skript, ob Valgrind Speicherlecks gefunden hat?

valgrind --leak-check=full --show-reachable=yes --xml=yes --xml-file=unit_tests_valgrind.out.xml ./unit_tests_runner 

Die RET_VALUE=$? wird der Rückgabewert des Programms (unit_tests_runner oben) setzen, nicht von valgrind. Und die einzige Möglichkeit zu überprüfen, ob das Valgrind Speicherprobleme gefunden hat, ist das Öffnen des Protokolls.

Gibt es eine Möglichkeit zum Einchecken eines Skripts, ob Speicherprobleme vorliegen? Wenn ja, wie?

Antwort

19

Sie scheinen nach der --error-exitcode Option zu suchen.

Da der Standardwert 0 ist, entspricht der Rückgabecode von Valgrind dem Prozess. Setzen Sie es stattdessen auf einen Wert ungleich Null.

Von Valgrind core manual:

--error-exitcode=<number> [default: 0]

Gibt einen alternativen Exit-Code zurück, wenn Valgrind Fehler im Vorfeld berichtet. Wenn dieser Wert auf den Standardwert (Null) gesetzt ist, ist der Rückgabewert von Valgrind immer der Rückgabewert des Prozesses, der simuliert wird. Bei einem Wert ungleich Null wird dieser Wert stattdessen zurückgegeben, wenn Valgrind Fehler feststellt. Dies ist nützlich für mit Valgrind als Teil einer automatisierten Testsuite, da es einfach, Testfälle zu erkennen, für die Valgrind Fehler gemeldet hat, nur durch Überprüfung der Rückkehrcodes.

+0

Ja, das ist, was ich gesucht habe. Danke –

+0

Ist es mir oder Einstellung '' zu -1 funktioniert nicht für mich, es scheint, als ob es größer als 0 sein muss? – chutsu

+4

'--leak-check = full' oder' yes' ist entscheidend, damit '--error-exitcode' sich wie erwartet verhält (abhängig von Ihrem Anwendungsfall). Ohne es werden die Leckfehler unterdrückt und nicht im Exit-Code gemeldet (valgrind 3.10 meldet sie nicht einmal als unterdrückt). – jtpereyda