¿Cómo actúa valgrind?


¿Puede alguien 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 memoria?

 74
Author: Tshepang, 2009-11-01

5 answers

Valgrind básicamente ejecuta su aplicación en un "sandbox"."Mientras se ejecuta en este sandbox, es capaz de insertar sus propias instrucciones para hacer depuración avanzada y creación de perfiles.

Del manual:

Su programa se ejecuta en una CPU sintética proporcionada por el núcleo 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 continuada de este código instrumentado.

Así que 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 herramientas (como memcheck). Estas herramientas son como plugins, y son capaces de modificar su aplicación antes de que se ejecute en el procesador.

Lo bueno 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á destinado a medir el rendimiento o ejecutar durante la ejecución normal de su aplicación, por lo que esto no es realmente un problema.

 94
Author: jheddings,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-01 02:49:37

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 bloqueos y perfilar las aplicaciones. DPI framework tiene su propio gestor de memoria de bajo nivel, programador, controlador de subprocesos y controlador de señal. Valgrind tool suite incluye herramientas como

  1. Memcheck - rastrea la asignación de memoria dinámicamente y reporta fugas de memoria.
  2. Helgrind-detecta e informa de bloqueos muertos, datos potenciales carreras y cierres inversos.
  3. Cachegrind - simula cómo la aplicación interactúa con la caché del sistema y proporciona información sobre errores de caché.
  4. Nulgrind - un simple valgrind que nunca hace ningún análisis. Utilizado por los desarrolladores para benchmark de rendimiento.
  5. Massif - una herramienta para analizar el uso de memoria de montón de la aplicación.

La herramienta Valgrind utiliza el mecanismo de desensamblar y resintetizar donde carga la aplicación en un proceso, desensambla la aplicación código, añadir el código de instrumentación para el análisis, ensambla de nuevo 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 plugin tool para instrumentación. El complemento de la herramienta agrega el código de análisis y lo ensambla de nuevo. Por lo tanto, Valgrind proporciona la flexibilidad para escribir nuestra propia herramienta en la parte superior del marco de Valgrind. Valgrind usa sombra registros y memoria de sombra para instrucciones de lectura/escritura del instrumento, llamada al sistema de lectura/escritura, asignaciones de pila y pila.

Valgrind proporciona envoltorios alrededor de la llamada al sistema y registra las devoluciones de llamada pre y post 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

 27
Author: Ashok Vairavan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-09 14:05:00

Valgrind se encuentra como una capa entre su programa y el sistema operativo, interceptando llamadas al sistema operativo que solicitan la asignación de memoria (de)y grabando lo que se está manipulando antes de asignar la memoria y devolver un equivalente. Es esencialmente 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 de programa).

 4
Author: Amber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-01 02:34:34

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

 2
Author: Charles Salvia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-01 02:34:56
 2
Author: kalad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-13 20:37:08