2010-02-23 14 views
6

Sto eseguendo un demone in Linux e voglio eseguire questo daemon sotto valgrind per trovare errori relativi alla memoria. Dato che è un demone, ho bisogno di usare l'opzione --trace-children=yes, ma questo genera molti processi più tardi durante la sua vita e non voglio che vengano eseguiti con valgrind. C'è un modo per escludere certi bambini dall'esecuzione con valgrind?Come escludere determinati processi figlio da eseguire con valgrind?

risposta

5

La versione attualmente rilasciata (valgrind 3.5.0) non ha alcuna opzione per rintracciare alcuni ma non tutti i bambini. Tuttavia, se si è disposti a utilizzare the latest code from the SVN repository, contiene una new option--trace-children-skip per questo scopo:

--trace-children-skip=patt1,patt2

Questa opzione ha effetto solo quando viene specificato --trace-children=yes. Permette di saltare alcuni bambini. L'opzione accetta un elenco di modelli separati da virgole per i nomi dei file eseguibili figlio in cui Valgrind non deve eseguire il tracciamento. I modelli possono includere i metacaratteri ? e *, che hanno il solito significato.

Questo può essere utile per l'eliminazione di rami non interessanti da un albero di processi in esecuzione su Valgrind. Ma dovresti stare attento quando lo usi. Quando Valgrind salta la traccia in un file eseguibile, non salta solo il tracciamento di quell'eseguibile, ma salta anche il tracciamento dei processi figli di quell'eseguibile. In altre parole, il flag non si limita a far sì che la traccia si fermi agli eseguibili specificati, ma salta la traccia di interi sottoprodotti del processo radicati in uno qualsiasi dei file eseguibili specificati.

Il metodo più vecchio è quello di omettere --trace-children=yes, e per i bambini che si vuole tracciare, sostituirli con uno script banale che esegue il programma vero e proprio sotto valgrind:

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

Anche con la nuova opzione, questo tipo di script può essere utile se si dispone di es un nipote che vuoi tracciare sotto valgrind ma vuoi saltare il suo genitore.

+0

Mark, grazie per la risposta. Ma ho trovato un modo più semplice! C'è un'opzione --trace-children-skip che fa esattamente quello che volevo. È disponibile solo in svn trunk, non in nessuna versione di rilascio. "--trace-children-skip = */sed, */expr, */xgcc, */cat, */rm, */stty" – kumar

+0

Fantastico! Ho usato l'altro modo per anni; è bello vedere questo è stato aggiunto. Ho aggiunto queste informazioni alla risposta. – mark4o

Problemi correlati