Pregunta

Puede alguien dar una explicación rápida de alto nivel de cómo funciona Valgrind? Un ejemplo: ¿cómo sabe cuando la memoria se asigna y se liberó

¿Fue útil?

Solución

Valgrind básicamente ejecuta la aplicación en una "caja de arena". Mientras se ejecuta en este entorno limitado, es capaz de insertar sus propias instrucciones para realizar la depuración avanzada y perfiles.

Desde el manual:

  

Su programa se ejecute 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 pasa el código de la herramienta seleccionada. La herramienta añade su propio código de instrumentación a esto y manos el resultado de nuevo al núcleo, que coordina la continua ejecución de este código instrumentado.

Así que, básicamente, valgrind proporciona un procesador virtual que se ejecuta la aplicación. Sin embargo, antes de que se procesan instrucciones de su aplicación, se pasan a las herramientas (como memcheck). Estas herramientas son una especie de plugins, y que son capaces de modificar su solicitud antes de que se ejecuta en el procesador.

Lo bueno de este enfoque es que usted no tiene que modificar o volver a enlazar su programa en absoluto para ejecutarlo en valgrind. Es causa de su programa para correr más lento, sin embargo valgrind no está destinado a medir el rendimiento o correr durante la ejecución normal de su aplicación, así que esto no es realmente un problema.

Otros consejos

Valgrind es una herramienta de análisis dinámico binario (DPA) que utiliza marco dinámico binario Instrumentación (DPI) para comprobar la asignación de memoria, para detectar los puntos muertos y al perfil de las aplicaciones. marco DPI tiene su propio gestor de memoria de bajo nivel, el planificador, el manejador de hilo y la señal de controlador. conjunto de herramientas incluye valgrind herramienta como

  1. Memcheck - un seguimiento de la asignación de memoria dinámica y pérdidas de memoria informes
  2. .
  3. Helgrind. - Detecta e informa sobre las cerraduras, las razas de datos posibles reversiones y encerrarlos
  4. Cachegrind -. Simula cómo la aplicación interactúa con el caché del sistema y proporciona información sobre fallos de caché
  5. Nulgrind - un valgrind simple que no haga nunca nada de análisis. Utilizado por los desarrolladores de referencia de rendimiento.
  6. Massif - una herramienta para analizar el uso de memoria montón de la aplicación
  7. .

herramienta Valgrind utiliza desmontar y el mecanismo de resintetizar donde se carga la aplicación en un proceso, desmonta el código de aplicación, añadir el código de instrumentación para el análisis, ensambla de nuevo y ejecuta la aplicación. Utiliza Sólo Intime compilador (JIT) para integrar 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 plugin herramienta agrega el código de análisis y monta de nuevo. Por lo tanto, Valgrind proporciona la flexibilidad necesaria para escribir nuestra propia herramienta en la parte superior del marco Valgrind. Valgrind utiliza registros de sombra y la memoria espejo para leer las instrucciones instrumento de lectura / escritura, lectura llamada al sistema / escritura, apilar y asignaciones del montón.

Valgrind proporciona envolturas alrededor de la llamada al sistema y los registros de devoluciones de llamada de pre y post para cada llamada al sistema para realizar un seguimiento de la memoria visitada como parte de la llamada al sistema. Por lo tanto, Valgrind es una capa de abstracción entre el sistema operativo Linux sistema operativo y la aplicación cliente.

El diagrama ilustra las 8 fases de Valgrind:

8 fases de Valgrind

valgrind se sienta como una capa entre su programa y el sistema operativo, la interceptación de llamadas a la memoria del sistema operativo que solicita (de) la asignación y registro de lo que está siendo manipulado antes de esa realidad, la asignación de la memoria y pasar de vuelta un equivalente. Básicamente se trata de cómo 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 del programa).

Valgrind es básicamente un máquina virtual que ejecuta el programa. Se trata de una arquitectura virtual que intercepta cada llamada para asignar / liberar memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top