Random IRC quote :      <iroz> el zeus lo hice yo <iroz> un dia que estaba borracho

GALD A Memory Leakage Detection System

Acabo de hacer publica GALD v1.0 una utilidad, que personalmente me resulta bastante util, dedicada a la deteccion de perdidas de memoria y double-freed pointers.

La ventaja sobre otros metodos es que no se necesita reemplazar las llamadas C standar malloc(), calloc(), realloc() o free(), permitiendo asi tener un sistema de detection de memory leakages implemente incluyendo una cabecera C y recompilando la aplicacion, ni emular una CPU lo cual ralentiza mucho la aplicacion e incluye basura proveniente de todas las librerias utilizadas.

Una vez lanzado el ejecutable por la salida estandar de errores apareceran trazas cuando la memoria es reservada y liberada junto con el nombre del fichero de codigo y la correspondiente linea. Para facilitar su comprension he incluido un simple escript que presenta un resumen una vez la aplicacion ha terminado.

Para terminar un ejemplo de uso:

$ head -4 sample.c
#include <stdio.h>
#include <GALD/GALD.h>
$ gcc sample.c -I include/ -o sample
$ ./sample 2>&1 | ./process_output.sh
####### EXTRA FREED MEM #######
GALD FREE : 0x501230 @ sample.c:86

####### LEAKED MEM #######
GALD ALLOC : 0x501010 size: 66 @ sample.c:37
GALD ALLOC : 0x5010b0 size: 99 @ sample.c:43
GALD ALLOC : 0x501120 size: 165 @ sample.c:49
GALD ALLOC : 0x501060 size: 0 @ sample.c:58
GALD ALLOC : 0x501080 size: 1 @ sample.c:58
GALD ALLOC : 0x5011d0 size: 2 @ sample.c:58
GALD ALLOC : 0x5011f0 size: 3 @ sample.c:58
GALD ALLOC : 0x501210 size: 4 @ sample.c:58

5 Comentarios para “GALD A Memory Leakage Detection System”

  1. Comment por mballano | 07/18/06 at 10:42 pm

    Está guapo :-), es una buena manera para testear código rapidamente, se podrían incluir otra serie de funciones incluso, de manera que cuando quieras realizar una depuración de cosas básicas en una aplicación cualquiera simplemente incluyes la cabecera esta y arreglado. Otra idea sería poder definir opciones de configuración previamente en plan para definir el formato de este log o que funciones quieres vigilar por la «salida de debug».

    Un saludo!

  2. Comment por Gabriel Gonzalez | 07/19/06 at 10:40 am

    Si, se pueden a;adir bastantes cosas utilices ya que puedes «hookear» tus propias funciones de una manera muy sencilla y poder crear un monton de estadisticas sobre el comportamiento del programa.
    Lo siguiente que necesito a;adir es un sistema de dection de «perdida de memoria compartida», porque hay veces que se me olvida liberarla y queda por ahi perdida en el sistema 😀

  3. Comment por Rubén | 07/19/06 at 12:11 pm

    Me mola me mola. Una idea que se me viene a la cabeza es poder asignar tags a la memoria, quiero decir, aunque el programa ya nos muestra el numero de linea donde se ha reservado. En programas tochos estaria wapi wapi xD, tener la opción de asignar una tag a la memoria reservada. Sería más intuitivo que el número de línea. Por ejemplo:

    GALD ALLOC : 0×110140 size: más de 100, unos 1000 @ chiniwini.c:42558
    GALD ALLOC : 0x110140 size: más de 100, unos 1000 @ «OBJ1» chiniwini.c:42558

    Qué opináis? Gabri,sería viable?

  4. Comment por Gabriel Gonzalez | 07/19/06 at 1:08 pm

    Si, se podria pero comento dos approach:

    1. Tendrias que a;adir un parametro a la llamada de reserva de memoria, y usando los parametros al preocmpilado se podria hacer sin problema pero requeriria incluir siempre esta cabecera para seleccionar el GALD_malloc() o el estandar y que elimine el argumento extra.

    2. Se podria dejar la asignacion de tags a un script externo, esto dejaria el programa intacto pero seria dificil seguir la variacion de los tags/lineas si sigues desarrollando el fichero.

    Gracias por los comentarios 🙂

  5. Comment por mballano | 07/19/06 at 2:20 pm

    Yo creo que la mejor opcion es post-procesado del log, al menos la más limpia, quicir obtienes ese log y luego lo tratas, hasta puedes hacer algun visor en plan GUI con un flow-chart ahí de la ejecución y cosas de ese estilo, pero toda esta información obtenida únicamente con la inclusión de la cabecera y sin modificar el programa, así tb te puedes pillar ahí el codigo fuente de tu programa open-source favorito y ayudar a mejorarlo .. 😉

Se han cerrado los comentarios