Valgrind

31 views
Skip to first unread message

Facundo Viale

unread,
Nov 11, 2010, 2:44:04 PM11/11/10
to c-t...@googlegroups.com
 Buenas! Esta semana estuve con algo de tiempo y me dedique a investigar un par de cosas, y puse en practica una Tool que me habían comentado desde hace mucho tiempo pero nunca había llegado a usarla. No soy un profesional en su uso, ya que solo hice algunas pruebas y leí un poco de la guía pero quizas gente con mas tiempo y necesidad sepa sacarle mayor provecho que yo.

La Tool se llama Valgrind ( http://valgrind.org/ ), y para no redefinir uso lo que dice la wikipedia:

Valgrind es un conjunto de herramientas libres que ayuda en la depuración de problemas de memoria y rendimiento de programas.
La herramienta más usada es Memcheck. Memcheck introduce código de instrumentación en el programa a depurar, lo que le permite realizar un seguimiento del uso de la memoria y detectar los siguientes problemas:
- Uso de memoria no inicializada.
- Lectura/escritura de memoria que ha sido previamente liberada.
- Lectura/escritura fuera de los límites de bloques de memoria dinámica.
- Memory Leaks
- Otros.

 El precio a pagar es un notable pérdida de rendimiento; los programas se ejecutan entre cinco y veinte veces más lento al usar Valgrind, y su consumo de memoria es mucho mayor. Por ello normalmente no siempre se ejecuta un programa en desarrollo usando Valgrind, sino que se usa en situaciones concretas cuando se está buscando un error determinado se trata de verificar que no haya errores ocultos como los que Memcheck puede detectar.
Valgrind incluye además otras herramientas:
- Addrcheck, versión ligera de Memcheck que se ejecuta más rápido y requiere menos memoria pero que detecta menos tipos de errores. Esta herramienta ha sido eliminada a partir de la versión 3.2.0.
- Massif, mide el rendimiento del monticulo (heap).
- Helgrind, herramienta de detección de condiciones de carrera (race conditions) en código multihilo.
- Cachegrind, mide el rendimiento de la caché durante la ejecución, de acuerdo a sus características (capacidad, tamaño del bloque de datos, grado de asociatividad, etc.).

 Bueno para hacer toda esta magia, la tool funciona realmente como una maquina virtual simulando cada una de las lineas y llevando registros de en que linea se ejecuto un malloc, que puntero es y si en algún momento ese puntero se libera. Lo mismo con los threads, y de esta manera puede darse cuenta donde ocurren los race conditions. Como simulado todo es por ello que la aplicación se vuelve realmente lenta, pero podemos saber exactamente en que linea hay memory leaks y manejo incorrecto de memoria.

 Para los que tenga linux, pueden bajarlo del repositorio sin problemas y para los que tengas Windows van a tener que esperar un par de milenios mas porque no existe para Windows. Pera para los que estén interesado entre a la pagina y tiene una guía completa, cualquier cosa acá les dejo el quick start http://valgrind.org/docs/manual/quick-start.html#quick-start.intro
 El mecanismo es muy simple, solo tienen que compilar su aplicación con -g ( para que agregue información de debugging ) y luego por consola hacer un "valgrind --leak-check=yes ./myprog"

PD1: Espero que puedan llegar a usarla y compartir su experiencia.
PD2: Como dato anecdotico hice un test de varias de mis librerias personales ( Colas, Listas, Strings, Arrays, HashMaps ) con CUnit y Valgrind y no les encontré Memory Leaks =P ( Pero cabe destacar que antes hice los test de Memory Leak de una forma muy manual, fea y que me llevo mucho tiempo ).

Saludos!

Jarlakxen

unread,
Nov 12, 2010, 9:26:40 AM11/12/10
to C Talks
Buenas nuevamente! Encontré un manual de Valgrind bastante
interesante, espero que les sea util.

http://www.network-theory.co.uk/docs/valgrind/index.html

Saludos!

On 11 nov, 16:44, Facundo Viale <facundo.m.vi...@gmail.com> wrote:
>  Buenas! Esta semana estuve con algo de tiempo y me dedique a investigar un
> par de cosas, y puse en practica una Tool que me habían comentado desde hace
> mucho tiempo pero nunca había llegado a usarla. No soy un profesional en su
> uso, ya que solo hice algunas pruebas y leí un poco de la guía pero quizas
> gente con mas tiempo y necesidad sepa sacarle mayor provecho que yo.
>
> La Tool se llama Valgrind (http://valgrind.org/), y para no redefinir uso
> lo que dice la wikipedia:
>
> *Valgrind es un conjunto de herramientas libres que ayuda en la depuración
> de problemas de memoria y rendimiento de programas.*
> *La herramienta más usada es Memcheck. Memcheck introduce código de
> instrumentación en el programa a depurar, lo que le permite realizar un
> seguimiento del uso de la memoria y detectar los siguientes problemas:*
> *- Uso de memoria no inicializada.*
> *- Lectura/escritura de memoria que ha sido previamente liberada.*
> *- Lectura/escritura fuera de los límites de bloques de memoria dinámica.*
> *- Memory Leaks*
> *- Otros.*
> *
> *
> * El precio a pagar es un notable pérdida de rendimiento; los programas se
> ejecutan entre cinco y veinte veces más lento al usar Valgrind, y su consumo
> de memoria es mucho mayor. Por ello normalmente no siempre se ejecuta un
> programa en desarrollo usando Valgrind, sino que se usa en situaciones
> concretas cuando se está buscando un error determinado se trata de verificar
> que no haya errores ocultos como los que Memcheck puede detectar.*
> *Valgrind incluye además otras herramientas:*
> *- Addrcheck, versión ligera de Memcheck que se ejecuta más rápido y
> requiere menos memoria pero que detecta menos tipos de errores. Esta
> herramienta ha sido eliminada a partir de la versión 3.2.0.*
> *- Massif, mide el rendimiento del monticulo (heap).*
> *- Helgrind, herramienta de detección de condiciones de carrera (race
> conditions) en código multihilo.*
> *- Cachegrind, mide el rendimiento de la caché durante la ejecución, de
> acuerdo a sus características (capacidad, tamaño del bloque de datos, grado
> de asociatividad, etc.).*
> *
> *
>  Bueno para hacer toda esta magia, la tool funciona realmente como una
> maquina virtual simulando cada una de las lineas y llevando registros de en
> que linea se ejecuto un malloc, que puntero es y si en algún momento ese
> puntero se libera. Lo mismo con los threads, y de esta manera puede darse
> cuenta donde ocurren los race conditions. Como simulado todo es por ello que
> la aplicación se vuelve realmente lenta, pero podemos saber exactamente en
> que linea hay memory leaks y manejo incorrecto de memoria.
>
>  Para los que tenga linux, pueden bajarlo del repositorio sin problemas y
> para los que tengas Windows van a tener que esperar un par de milenios mas
> porque no existe para Windows. Pera para los que estén interesado entre a la
> pagina y tiene una guía completa, cualquier cosa acá les dejo el quick
> starthttp://valgrind.org/docs/manual/quick-start.html#quick-start.intro

Luciano Dzisiuk

unread,
Nov 15, 2010, 8:44:36 PM11/15/10
to C Talks
uh que bueno!
Reply all
Reply to author
Forward
0 new messages