/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * debug.h * * Tue Apr 12 14:34:20 CEST 2005 * Copyright 2005 Bent Bisballe * deva@aasimon.org ****************************************************************************/ /* * This file is part of MIaV. * * MIaV is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * MIaV is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MIaV; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "config.h" #ifndef __MIAV_DEBUG_H__ #define __MIAV_DEBUG_H__ //#define DEBUG_ALLOC #ifdef DEBUG_ALLOC typedef struct _A_{ struct _A_* prev; struct _A_* next; char name[32]; void *addr; } __debug__; __debug__ *debug_first = NULL; inline void debugAlloc(void *p, char* name) { __debug__ *d = debug_first; fprintf(stderr, "Adding %d - %s\n", p, name); debug_first = (__debug__*)malloc(sizeof(__debug__)); debug_first->prev = NULL; debug_first->next = d; if(d) d->prev = debug_first; debug_first->addr = p; strcpy(debug_first->name, name); } inline void debugFree(void *p) { __debug__ *d = debug_first; while(d && d->addr != p) { d = d->next; } if(!d) { fprintf(stderr, "ERROR: memory address not found %d - perhaps already freed!\n", p); exit(1); } fprintf(stderr, "Removing %d - %s\n", p, d->name); __debug__ *next = d->next; __debug__ *prev = d->prev; if(prev) prev->next = d->next; if(next) next->prev = d->prev; if(debug_first == d) debug_first = next; free(d); } inline void debugPrint() { __debug__ *d = debug_first; fprintf(stderr, "Alloc List:\n"); while(d) { fprintf(stderr, "\t[%d] %s\n", d->addr, d->name); d = d->next; } } #define FREE(x) debugFree(x) #define ALLOC(x, y) debugAlloc(x, y) #define PRINT() debugPrint() #else/*DEBUG_ALLOC*/ #define FREE(x) {} #define ALLOC(x, y) {} #define PRINT() {} #endif/*DEBUG_ALLOC*/ #endif/*__MIAV_DEBUG_H__*/