⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbmalloc.h

📁 debug source code under unix platform.
💻 H
字号:
#ifndef MPT_DBMALLOC_H#define MPT_DBMALLOC_H/* * mpatrol * A library for controlling and tracing dynamic memory allocations. * Copyright (C) 1997-2002 Graeme S. Roy <graeme.roy@analog.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. *//* * Dbmalloc-compatible interface.  Implements Dbmalloc functions using * mpatrol.  Dbmalloc is copyright (C) 1990-1992 Conor P. Cahill. *//* * $Id: dbmalloc.h,v 1.15 2002/01/08 20:05:10 graeme Exp $ *//* * This file provides Dbmalloc-compatible functions which are built on top * of the mpatrol library.  They are compatible with the last known public * release of Dbmalloc (patch level 14), but only the Dbmalloc-specific * functions are defined here, leaving the overriding of standard functions * up to the mpatrol library.  As the mpatrol library does not currently * override the C library string functions and the X toolkit heap allocation * functions, neither does this file. * * The dbmallopt() function does not support the setting of all of the * Dbmalloc options.  In fact, most of them do not make sense when applied * to the mpatrol library.  Some of them have slightly changed behaviour * due to the mapping process and some of them cannot be implemented due to * the mpatrol library having been initialised beforehand. * * The malloc_dump() function does not support the full recognition of the * MALLOC_DETAIL option in that it does not display the additional columns * and summary that the Dbmalloc library does.  This is because this would * make no sense when applied to the mpatrol library, but it does still * affect whether freed allocations are shown in the listing (although the * details for such allocations are slightly different, and there are no * entries displayed for free memory blocks). * * The output for the malloc_dump() and malloc_list() functions is almost * identical to that of the Dbmalloc library except for a slight change in * the pointer format when displaying the address of each memory allocation. * The stack information is obtained differently as well, since the mpatrol * library records symbolic stack tracebacks for each memory allocation. * As a result, malloc_enter() and malloc_leave() do nothing and the return * address in a stack frame is displayed if no associated symbol name, file * and line number could be determined.  Parentheses are not printed at the * end of symbol names so that they can be processed properly by a C++ * demangler if necessary.  Passing a file descriptor of 0 to malloc_dump() * or malloc_list() results in the output being sent to the mpatrol log * file. * * The malloc_size() and malloc_mark() functions do not give an error * message if the pointer passed in does not correspond to a heap * allocation.  Neither of these functions automatically perform an * integrity check of the heap.  Note that the malloc_chain_check() * function will never return a non-zero value - it always terminates with * an error message in the mpatrol log file whenever it detects heap * corruption.  As a result, the malloc_abort() function is not used. * * This file is initialised via the mpatrol library's initialiser function * feature, which means that if the __mp_init_dbmalloc() function is noted * by the mpatrol symbol manager then it will be called when the mpatrol * library is being initialised.  If this feature is not supported then the * dbmallinit() function must be called as early on as possible, otherwise * this file will not be initialised until one of its functions are called. */#include <mpatrol.h>/* Commands for dbmallopt().  Some of them are ignored as they have no * meaning when used with the mpatrol library. */#define MALLOC_WARN      100#define MALLOC_FATAL     101#define MALLOC_ERRFILE   102#define MALLOC_CKCHAIN   103#define MALLOC_FILLAREA  104#define MALLOC_LOWFRAG   105#define MALLOC_CKDATA    106#define MALLOC_REUSE     107#define MALLOC_SHOWLINKS 108#define MALLOC_DETAIL    109#define MALLOC_FREEMARK  110#define MALLOC_ZERO      111/* The settings for the MALLOC_WARN and MALLOC_FATAL options. */#define M_HANDLE_IGNORE 0#define M_HANDLE_ABORT  1#define M_HANDLE_EXIT   2#define M_HANDLE_CORE   3#define M_HANDLE_DUMP   128/* The errors reported by the library.  None of these are actually used * in this implementation and are here in case user code relies on them. */#define M_CODE_CHAIN_BROKE  MP_ET_MAX#define M_CODE_NO_END       MP_ET_MAX#define M_CODE_BAD_PTR      MP_ET_NOTALL#define M_CODE_BAD_MAGIC    MP_ET_NOTALL#define M_CODE_BAD_CONNECT  MP_ET_MAX#define M_CODE_OVERRUN      MP_ET_ALLOVF#define M_CODE_REUSE        MP_ET_FRDCOR#define M_CODE_NOT_INUSE    MP_ET_PRVFRD#define M_CODE_NOMORE_MEM   MP_ET_OUTMEM#define M_CODE_OUTOF_BOUNDS MP_ET_RNGOVF#define M_CODE_FREELIST_BAD MP_ET_MAX#define M_CODE_NOBOUND      MP_ET_MAX#define M_CODE_STK_NOCUR    MP_ET_MAX#define M_CODE_STK_BADFUNC  MP_ET_MAX#define M_CODE_UNDERRUN     MP_ET_ALLOVF#define M_CODE_FREEMARK     MP_ET_FREMRK#define M_CODE_ZERO_ALLOC   MP_ET_ALLZER/* The union used to supply a command argument to dbmallopt(). */union dbmalloptarg{    long i;    /* integer value */    char *str; /* string value */};#ifndef NDEBUG#define malloc_errno __mp_errno#define dbmallinit() __mp_init_dbmalloc()#define dbmallopt(c, v) __mpt_dbmallocoption((c), (v))#define malloc_perror(s) __mpt_dbmallocperror(s)#define malloc_chain_check(f) __mpt_dbmallocchaincheck((f), MP_FUNCNAME, \                                                       __FILE__, __LINE__)#define malloc_dump(f) __mpt_dbmallocdump(f)#define malloc_list(f, l, u) __mpt_dbmalloclist((f), (l), (u))#define malloc_inuse(h) __mpt_dbmallocinuse(h)#define malloc_size(p) __mpt_dbmallocsize(p)#define malloc_mark(p) (void) __mp_setmark(p)#define malloc_enter(f) ((void) 0)#define malloc_leave(f) ((void) 0)#ifdef __cplusplusextern "C"{#endif /* __cplusplus */int __mpt_dbmallocoption(int, union dbmalloptarg *);void __mpt_dbmallocperror(MP_CONST char *);int __mpt_dbmallocchaincheck(int, MP_CONST char *, MP_CONST char *,                             unsigned long);void __mpt_dbmallocdump(int);void __mpt_dbmalloclist(int, unsigned long, unsigned long);unsigned long __mpt_dbmallocinuse(unsigned long *);size_t __mpt_dbmallocsize(MP_CONST void *);void __mp_init_dbmalloc(void);static MP_VOLATILE void *__mpt_init_dbmalloc = (void *) __mp_init_dbmalloc;#ifdef __cplusplus}#endif /* __cplusplus */#else /* NDEBUG */#define malloc_errno __mp_errno#define dbmallinit() ((void) 0)#define dbmallopt(c, v) ((int) 1)#define malloc_perror(s) ((void) 0)#define malloc_chain_check(f) ((int) 0)#define malloc_dump(f) ((void) 0)#define malloc_list(f, l, u) ((void) 0)#define malloc_inuse(h) (*(h) = 0, (unsigned long) 0)#define malloc_size(p) ((size_t) -1)#define malloc_mark(p) ((void) 0)#define malloc_enter(f) ((void) 0)#define malloc_leave(f) ((void) 0)#endif /* NDEBUG */#endif /* MPT_DBMALLOC_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -