Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.3. Cómo utilizar Valgrind para perfilar el uso de memoria

Valgrind es un marco de trabajo que proporciona instrumentación para binarios de espacio de usuario. Se distribuye con un número de herramientas que sirven para perfilar y analizar el rendimiento del programa. Las herramientas descritas en esta sección proporcionan un análisis que puede ayudar en la detección de errores de memoria tales como el uso de memoria no inicializada y la asignación o desasignación incorrecta de memoria. Todas se incluyen en el paquete valgrind, y pueden ejecutarse con el siguiente comando:
valgrind --tool=nombre de herramienta programa
Remplace nombre de herramienta por el nombre de la herramienta que usted desea usar (para perfilar la memoria, memcheck, massif, o cachegrind), y programa por el programa que desea perfilar con Valgrind. Tenga en cuenta que la instrumentación de Valgrind hará que su programa se ejecute más lentamente que lo normal.
Para obtener una visión general de las capacidades de Valgrind vaya a la Sección 3.5.3, “Valgrind”. Información adicional, incluida la disponible sobre conectores para Eclipse, se encuentra en la Guía del desarrollador, disponible en http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. También puede ver información en la página de manual con el comando man valgrind cuando el paquete valgrind esté instalado o se encuentre en los siguientes sitios:
  • /usr/share/doc/valgrind-versión/valgrind_manual.pdf, y
  • /usr/share/doc/valgrind-version/html/index.html.

5.3.1. Perfilar uso de memoria con Memcheck

Memcheck es la herramienta predeterminada de Valgrind, y puede ejecutarse con valgrind programa, sin especificar --tool=memcheck. Detecta y reporta una serie de errores que pueden dificultar la detección y el diagnóstico, tal como el acceso a la memoria, lo cual no debería ocurrir, el uso de valores indefinidos o no inicializados, memoria de montículo liberada incorrectamente, punteros superpuestos y escapes de memoria. Los programas se ejecutan diez o treinta veces más lentamente con Memcheck que cuando se ejecutan normalmente.
Memcheck retorna errores específicos según el tipo de problema que detecte. Estos errores se describen en la documentación de Valgrind, la cual se incluye en /usr/share/doc/valgrind-versión/valgrind_manual.pdf.
Observe que Memcheck solamente reporta dichos errores— no evita que ocurran. Si su programa accede a memoria de tal forma que resulte en una falla de segmentación, la falla de segmentación aún ocurrirá. Sin embargo, Memcheck registrará un mensaje de errores inmediatamente antes de la falla.
Memcheck proporciona opciones de línea de comandos que pueden servir para enfocar el proceso de verificación. Algunas de las opciones disponibles son:
--leak-check
Si Memcheck está habilitada, buscará escapes de memoria cuando el programa de cliente termine. El valor predeterminado es summary, el cual emite el número de escapes que encuentra. Otros valores posibles son yes y full, ambos informan sobre cada escape, y el valor no, desactiva la verificación de escape de memoria.
--undef-value-errors
Si Memcheck está habilitada (yes), reportará errores cuando se utilicen valores indefinidos. Si Memcheck está inhabilitada (no), los valores de errores indefinidos no se reportarán. Este valor es el predeterminado. Al inhabilitarlo se agiliza un poco Memcheck.
--ignore-ranges
Permite al usuario especificar uno más rangos que Memcheck debe ignorar al verificar el direccionamiento. Los múltiples rangos están delimitados por comas, por ejemplo, --ignore-ranges=0xPP-0xQQ,0xRR-0xSS.
Para obtener una lista completa de las opciones, consulte la documentación incluida en /usr/share/doc/valgrind-version/valgrind_manual.pdf.