Inicio > Entorno y utilidades > valgrind

valgrind: Herramienta de depuración y perfilado de memoria

valgrind es un conjunto de herramientas potente utilizado para detectar errores de gestión de memoria en programas (como fugas de memoria, accesos incorrectos a memoria), encontrar problemas relacionados con hilos (condiciones de carrera) y realizar perfilado de rendimiento. Se utiliza principalmente para depurar programas en C/C++.

Descripción general

valgrind proporciona varias 'herramientas' para analizar diferentes tipos de problemas. La herramienta más utilizada es 'Memcheck', que detecta errores de memoria en tiempo de ejecución. Otras herramientas incluyen Cachegrind (perfilado de caché), Callgrind (perfilado de llamadas a funciones), Helgrind/DRD (detección de errores de hilos), Massif (perfilado de heap), entre otras.

Funciones principales

valgrind ofrece las siguientes funciones principales:

  • Detección de fugas de memoria
  • Detección de acceso incorrecto a memoria
  • Detección de uso de valores no inicializados
  • Detección de corrupción de heap
  • Detección de condiciones de carrera en hilos
  • Perfilado de caché de CPU y llamadas a funciones

Instalación

valgrind no suele estar incluido por defecto en la mayoría de las distribuciones de Linux, por lo que debe instalarse a través del gestor de paquetes.

Debian/Ubuntu

sudo apt update
sudo apt install valgrind

Se instala utilizando el gestor de paquetes APT.

RHEL/CentOS/Fedora

sudo yum install valgrind  # o sudo dnf install valgrind

Se instala utilizando el gestor de paquetes YUM o DNF.

Opciones principales

valgrind se utiliza con varias herramientas, y cada herramienta tiene sus propias opciones. Aquí se describen las opciones utilizadas comúnmente con la herramienta Memcheck.

Opciones generales

Opciones de Memcheck

Comando generado:

Combina los comandos.

Descripción:

`valgrind` Ejecutando el comando.

Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.

Ejemplos de uso

Varios ejemplos para analizar programas usando valgrind. Se asume que se utiliza un archivo ejecutable llamado `my_program` en los ejemplos.

Comprobación básica de errores de memoria

valgrind ./my_program

El uso más básico para comprobar errores de memoria en `my_program`.

Comprobación detallada de fugas de memoria

valgrind --leak-check=full --show-leak-kinds=all ./my_program

Informa detalladamente sobre todos los errores de memoria, incluidas las fugas, y muestra todos los tipos de fugas.

Rastreo de valores no inicializados

valgrind --track-origins=yes ./my_program

Cuando se utilizan valores no inicializados, rastrea el origen de esos valores y los informa.

Perfilado de caché con Cachegrind

valgrind --tool=cachegrind ./my_program

Analiza el uso de la caché de la CPU para encontrar cuellos de botella de rendimiento. Los resultados se guardan en el archivo `cg.out.<pid>`.

Perfilado de llamadas a funciones con Callgrind

valgrind --tool=callgrind ./my_program

Analiza el número de llamadas a funciones y su coste. Los resultados se guardan en el archivo `callgrind.out.<pid>`.

Consejos y precauciones

Consejos y puntos a tener en cuenta para utilizar valgrind de manera efectiva.

Incluir símbolos de depuración

Para que valgrind informe los nombres de archivo y números de línea correctos, debe incluir símbolos de depuración al compilar el programa (por ejemplo, usando la opción `-g` en GCC/Clang).

  • Usar la opción `-g` al compilar: `gcc -g my_program.c -o my_program`

Sobrecarga de rendimiento

valgrind ejecuta el programa en una máquina virtual, por lo que es mucho más lento que la ejecución normal (de 5 a más de 100 veces). Por lo tanto, puede no ser adecuado para pruebas sensibles al rendimiento o programas de larga ejecución.

  • Aumento del tiempo de ejecución: 5-100 veces más lento que la ejecución normal
  • Precaución al analizar programas a gran escala

Interpretación de la salida

La salida de valgrind es detallada, pero puede parecer compleja al principio. Lea atentamente los mensajes de error y los rastreos de pila, y concéntrese especialmente en los mensajes 'definitely lost' (fugas definidas) para resolverlos.

  • Análisis de mensajes de error y rastreos de pila
  • Resolver primero las fugas 'definitely lost'

Uso de otras herramientas

Además de Memcheck, existen varias herramientas como Cachegrind, Callgrind, Massif, etc., así que elija la herramienta adecuada según sea necesario.

  • Análisis de rendimiento: `cachegrind`, `callgrind`
  • Análisis de uso de heap: `massif`
  • Problemas de hilos: `helgrind`, `drd`

Comandos de la misma categoría