Valgrind


Valgrind ( / ˈ v æ l ɡ r ɪ n d / ) es una herramienta de programación para la depuración de memoria , la detección de fugas de memoria y la creación de perfiles .

Valgrind se diseñó originalmente para ser una herramienta de depuración de memoria gratuita para Linux en x86 , pero desde entonces ha evolucionado hasta convertirse en un marco genérico para crear herramientas de análisis dinámico, como verificadores y perfiladores.

El nombre Valgrind es una referencia a la entrada principal de Valhalla de la mitología nórdica. Durante el desarrollo (antes del lanzamiento), el proyecto se llamó Heimdall ; sin embargo, el nombre habría entrado en conflicto con un paquete de seguridad.

Valgrind es, en esencia, una máquina virtual que utiliza técnicas de compilación justo a tiempo (JIT), incluida la recompilación dinámica . Nada del programa original se ejecuta nunca directamente en el procesador anfitrión . En su lugar, Valgrind primero traduce el programa a una forma temporal más simple llamada Representación intermedia (IR), que es una forma basada en SSA independiente del procesador . Después de la conversión, una herramienta (ver a continuación) es libre de realizar las transformaciones que desee en el IR, antes de que Valgrind vuelva a traducir el IR a código de máquina y permita que el procesador host lo ejecute. Valgrind recompila código binariopara ejecutarse en CPU de host y de destino (o simuladas) de la misma arquitectura. También incluye un código auxiliar de GDB para permitir la depuración del programa de destino mientras se ejecuta en Valgrind, con "comandos de supervisión" que permiten consultar la herramienta Valgrind para obtener información diversa.

Se pierde una cantidad considerable de rendimiento en estas transformaciones (y, por lo general, el código que inserta la herramienta); por lo general, el código se ejecuta con Valgrind y la herramienta "ninguna" (que no hace nada con el IR) se ejecuta entre un 20 % y un 25 % de la velocidad del programa normal. [4] [5]

Hay múltiples herramientas incluidas con Valgrind (y varias externas). La herramienta predeterminada (y la más utilizada) es Memcheck . Memcheck inserta código de instrumentación adicional alrededor de casi todas las instrucciones, lo que realiza un seguimiento de la validez (toda la memoria no asignada comienza como inválida o "indefinida", hasta que se inicializa en un estado determinista, posiblemente desde otra memoria) y direccionabilidad (si la dirección de memoria en pregunta apunta a un bloque de memoria asignado, no liberado), almacenado en los llamados bits V y bits A respectivamente. A medida que los datos se mueven o manipulan, el código de instrumentación realiza un seguimiento de los bits A y V, por lo que siempre son correctos en un nivel de un solo bit.