2010-02-23 7 views
6

Estoy ejecutando un daemon en Linux y quiero ejecutar este daemon en valgrind para encontrar errores relacionados con la memoria. Como es un daemon, necesito usar la opción --trace-children=yes, pero esto genera muchos procesos más adelante durante su ciclo de vida y no quiero que se ejecuten bajo valgrind. ¿Hay alguna forma de excluir a ciertos niños de correr bajo valgrind?Cómo excluir ciertos procesos secundarios para que se ejecuten en valgrind?

Respuesta

5

La versión actualmente publicada (valgrind 3.5.0) no tiene la opción de rastrear algunos, pero no todos los elementos secundarios. Sin embargo, si usted está dispuesto a utilizar the latest code from the SVN repository, que contiene una new option--trace-children-skip para este propósito:

--trace-children-skip=patt1,patt2

Esta opción sólo tiene efecto cuando se especifica --trace-children=yes. Permite que algunos niños sean salteados. La opción toma una lista de patrones separados por comas para los nombres de ejecutables secundarios que Valgrind no debe rastrear. Los patrones pueden incluir los metacaracteres ? y *, que tienen el significado habitual.

Esto puede ser útil para podar ramas no interesantes de un árbol de procesos que se ejecutan en Valgrind. Pero debes tener cuidado cuando lo uses. Cuando Valgrind omite el rastreo en un archivo ejecutable, no solo omite el rastreo de ese archivo ejecutable, sino que también omite el rastreo de cualquiera de los procesos secundarios de ese ejecutable. En otras palabras, el indicador no solo hace que el seguimiento se detenga en los archivos ejecutables especificados: omite el rastreo de subárboles de proceso enteros enraizados en cualquiera de los ejecutables especificados.

El método más antiguo es omitir --trace-children=yes, y para los niños que no desea rastrear, reemplazarlos con un guión trivial que se ejecuta el programa real bajo valgrind:

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

Incluso con la nueva opción, este tipo de script puede ser útil si tiene, por ejemplo, un nieto que desea rastrear en valgrind pero quiere omitir su padre.

+0

Mark, gracias por la respuesta. ¡Pero encontré una manera más fácil! Hay una opción --trace-children-skip que hace exactamente lo que yo quería. Solo está disponible en svn trunk, no en ninguna versión de lanzamiento. "--trace-children-skip = */sed, */expr, */xgcc, */cat, */rm, */stty" – kumar

+0

¡Genial! He estado usando el otro lado durante años; es bueno ver que esto se está agregando. He agregado esta información a la respuesta. – mark4o

Cuestiones relacionadas