¿Cómo actúa valgrind?

80

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

extraeee
fuente

Respuestas:

106

Valgrind básicamente ejecuta su aplicación en una "caja de arena". Mientras se ejecuta en esta caja de arena, puede insertar sus propias instrucciones para realizar depuraciones y perfiles avanzados.

Del manual:

Luego, su programa se ejecuta en una CPU sintética proporcionada por el núcleo de Valgrind. Cuando se ejecuta un 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 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 que se procesen las instrucciones de su aplicación, se pasan a 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 está diseñado para medir el rendimiento o ejecutarse durante la ejecución normal de su aplicación, por lo que esto no es realmente un problema.

jheddings
fuente
3
Este artículo de Julian Seward amplía un poco el diseño de Valgrind: cursos.cs.washington.edu/courses/cse326/05wi/valgrind-doc/…
user11171
34

Valgrind es una herramienta de análisis binario dinámico (DPA) que utiliza el marco de instrumentación binaria dinámica (DPI) para verificar la asignación de memoria, detectar puntos muertos y perfilar las aplicaciones. El marco DPI tiene su propio administrador de memoria de bajo nivel, programador, manejador de subprocesos y manejador de señales. La suite de herramientas Valgrind incluye herramientas como

  1. Memcheck: rastrea la asignación de memoria de forma dinámica e informa sobre pérdidas de memoria.
  2. Helgrind: detecta e informa sobre bloqueos muertos, posibles carreras de datos y reversiones de bloqueos.
  3. Cachegrind: simula cómo la aplicación interactúa con la caché del sistema y proporciona información sobre fallas de caché.
  4. Nulgrind: un valgrind simple que nunca realiza ningún análisis. Utilizado por los desarrolladores para comparar el rendimiento.
  5. Massif: una herramienta para analizar el uso de memoria del montón de la aplicación.

La herramienta Valgrind utiliza un 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 el 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 desensambla el código de la aplicación y pasa el fragmento de código al complemento de la herramienta para la instrumentación. El complemento de la herramienta agrega el código de análisis y lo ensambla nuevamente. Por lo tanto, Valgrind proporciona la flexibilidad de escribir nuestra propia herramienta sobre el marco de Valgrind. Valgrind utiliza registros de sombra y memoria de sombra para instrumentar instrucciones de lectura / escritura, llamadas al sistema de lectura / escritura, asignaciones de pila y montón.

Valgrind proporciona envoltorios alrededor de la llamada al sistema y se registra para 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 sistema operativo entre el sistema operativo Linux y la aplicación cliente.

El diagrama ilustra las 8 fases de Valgrind:

8 fases de Valgrind

Ashok Vairavan
fuente
¿Puede informarme la fuente de esta información o cualquier enlace que contenga estos detalles? Gracias.
mezda
4

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

Ámbar
fuente
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.

Carlos Salvia
fuente