2009-11-01 17 views
70

¿Alguien puede proporcionar una explicación rápida de alto nivel de cómo funciona Valgrind? Un ejemplo: ¿cómo sabe cuándo se asigna y libera la memoria?¿Cómo funciona valgrind?

Respuesta

90

Valgrind básicamente ejecuta su aplicación en un "recinto de seguridad". Mientras se ejecuta en este entorno limitado, puede insertar sus propias instrucciones para realizar una depuración y un perfil avanzados.

Del manual:

Su programa a continuación, se ejecutará en una CPU sintético proporcionado por el núcleo de Valgrind. A medida que se ejecuta el nuevo código por primera vez, el núcleo entrega el código a la herramienta seleccionada. La herramienta agrega su propio código de instrumentación a esto y devuelve el resultado al núcleo, que coordina la ejecución continua de este código instrumentado.

Básicamente, valgrind proporciona un procesador virtual que ejecuta su aplicación. Sin embargo, antes de procesar las instrucciones de su aplicación, se pasan a las herramientas (como memcheck). Estas herramientas son como complementos, y pueden modificar su aplicación antes de que se ejecute en el procesador.

Lo mejor de este enfoque es que no tiene que modificar o volver a vincular su programa para ejecutarlo en valgrind. Hace que su programa se ejecute más lento, sin embargo, valgrind no tiene la intención de medir el rendimiento o ejecutar durante la ejecución normal de su aplicación, por lo que esto no es realmente un problema.

+2

Este artículo de Julian Seward expande un poco en el diseño de Valgrind: http://courses.cs.washington.edu/courses/cse326 /05wi/valgrind-doc/mc_techdocs.html – user11171

3

valgrind se sienta como una capa entre su programa y el sistema operativo, interceptando llamadas al sistema operativo que solicita memoria (de) asignación y grabando lo que se está manipulando antes de asignar la memoria y devolver un equivalente. Esencialmente, la mayoría de los analizadores de código funcionan, excepto a un nivel mucho más bajo (llamadas al sistema en lugar de llamadas a funciones del programa).

2

Valgrind es básicamente una máquina virtual que ejecuta su programa. Es una arquitectura virtual que intercepta cada llamada para asignar/liberar memoria.

23

Valgrind es una herramienta de Análisis Binario Dinámico (DPA) que utiliza un marco de Instrumentación Dinámica Binaria (DPI) para verificar la asignación de memoria, detectar interbloqueos y perfilar las aplicaciones. El marco DPI tiene su propio administrador de memoria de bajo nivel, programador, manejador de subprocesos y manejador de señal. El conjunto de herramientas de Valgrind incluye herramientas como

  1. Memcheck: realiza un seguimiento dinámico de la asignación de memoria e informa sobre fugas de memoria.
  2. Helgrind - detecta e informa bloqueos muertos, carreras de datos potenciales y reversiones de bloqueo.
  3. Cachegrind: simula cómo la aplicación interactúa con la memoria caché del sistema y proporciona información sobre las fallas de la memoria caché.
  4. Nulgrind - un valor simple que nunca hace ningún análisis. Utilizado por los desarrolladores para el rendimiento de referencia.
  5. Macizo: una herramienta para analizar el uso de la memoria de montón de la aplicación.

La herramienta Valgrind utiliza el mecanismo de desmontaje y resintetización donde carga la aplicación en un proceso, desensambla el código de la aplicación, agrega el código de instrumentación para análisis, lo ensambla y ejecuta la aplicación. Utiliza Just Intime Compiler (JIT) para incrustar la aplicación con el código de instrumentación.

   Valgrind Tool = Valgrind Core + Tool Plugin 

Valgrind Core desmonta el código de aplicación y pasa el fragmento de código para plugin de herramienta para la instrumentación. El complemento de herramienta agrega el código de análisis y lo ensambla. Por lo tanto, Valgrind proporciona la flexibilidad para escribir nuestra propia herramienta sobre el marco de Valgrind. Valgrind utiliza registros de sombra y memoria oculta para instruir instrucciones de lectura/escritura, lectura/escritura de llamadas al sistema, pila y asignaciones de pila.

Valgrind proporciona envoltorios alrededor de la llamada del sistema y registra las devoluciones de llamada previas y posteriores para cada llamada al sistema para rastrear la memoria a la que se accede como parte de la llamada al sistema. Por lo tanto, Valgrind es una capa de abstracción del SO entre el sistema operativo Linux y la aplicación cliente.

El diagrama ilustra las 8 fases de Valgrind:

8 phases of Valgrind

+0

¿me puede informar la fuente de esta información o cualquier enlace que contenga estos detalles? Gracias. – mezda

+1

Aquí tienes ... http://valgrind.org/docs/valgrind2007.pdf –