UMEM_DEBUG(3MALLOC)  Memory Allocation Library Functions UMEM_DEBUG(3MALLOC)
NAME
       umem_debug - debugging features of the umem library
SYNOPSIS
       cc [ 
flag... ] 
file... 
-lumem [ 
library... ]
       #include <
umem.h>
DESCRIPTION
       The 
libumem library provides debugging features that detect memory
       leaks, buffer overruns, multiple frees, use of uninitialized data,
       use of freed data, and many other common programming errors. The
       activation of the run-time debugging features is controlled by
       environment variables.
       When the library detects an error, it writes a description of the
       error to an internal buffer that is readable with the 
::umem_status       mdb(1) dcmd and then calls 
abort(3C).
       When using the debugging features of the library, a program may opt
       into changing the failure rate of memory allocation. This is often
       useful for test code that would like to force memory allocation
       failures in a controlled fashion. See the 
umem_setmtbf(3MALLOC)       function for more information.
ENVIRONMENT VARIABLES
       UMEM_DEBUG                       This variable contains a list of comma-separated
                       options.  Unrecognized options are ignored. Possible
                       options include:                       
audit[=
frames]
                                           This option enables the recording
                                           of auditing information,
                                           including thread ID, high-
                                           resolution time stamp, and stack
                                           trace for the last action
                                           (allocation or free) on every
                                           allocation.  If transaction
                                           logging (see 
UMEM_LOGGING) is
                                           enabled, this auditing
                                           information is also logged.
                                           The 
frames parameter sets the
                                           number of stack frames recorded
                                           in the auditing structure. The
                                           upper bound for frames is
                                           implementation-defined. If a
                                           larger value is requested, the
                                           upper bound is used instead.
                                           If 
frames is not specified or is
                                           not an integer, the default value
                                           of 15 is used.
                                           This option also enables the                                           
guards option.                       
contents[=
count]
                                           If auditing and contents logging
                                           (see 
UMEM_LOGGING) are enabled,
                                           the first 
count bytes of each
                                           buffer are logged when they are
                                           freed.  If a buffer is shorter
                                           than 
count bytes, it is logged in
                                           its entirety.
                                           If 
count is not specified or is
                                           not an integer, the default value
                                           of 256 is used.                       
default                                           This option is equivalent to                                           
audit,
contents,
guards.                       
guards                                           This option enables filling
                                           allocated and freed buffers with
                                           special patterns to help detect
                                           the use of uninitialized data and
                                           previously freed buffers. It also
                                           enables an 8-byte redzone after
                                           each buffer that contains                                           
0xfeedfacefeedfaceULL.
                                           When an object is freed, it is
                                           filled with 
0xdeadbeef.  When an
                                           object is allocated, the                                           
0xdeadbeef pattern is verified
                                           and replaced with 
0xbaddcafe.
                                           The redzone is checked every time
                                           a buffer is allocated or freed.
                                           For caches with either
                                           constructors or destructors, or
                                           both, 
umem_cache_alloc(3MALLOC)                                           and 
umem_cache_free(3MALLOC)                                           apply the cache's constructor and
                                           destructor, respectively, instead
                                           of caching constructed objects.
                                           The presence of 
assert(3C)s in
                                           the destructor verifying that the
                                           buffer is in the constructed
                                           state can be used to detect any
                                           objects returned in an improper
                                           state.  See                                           
umem_cache_create(3MALLOC) for
                                           details.                       
verbose                                           The library writes error
                                           descriptions to standard error
                                           before aborting. These messages
                                           are not localized.       
UMEM_LOGGING                       To be enabled, this variable should be set to a
                       comma-separated list of in-memory logs. The logs
                       available are:                       
transaction[=
size]
                                             If the 
audit debugging option
                                             is set (see 
UMEM_DEBUG), the
                                             audit structures from previous
                                             transactions are entered into
                                             this log.                       
contents[=
size]
                                             If the 
audit debugging option
                                             is set, the contents of objects
                                             are recorded in this log as
                                             they are freed.
                                             If the "contents" debugging
                                             option was not set, 256 bytes
                                             of each freed buffer are saved.                       
fail[=
size]
                                             Records are entered into this
                                             log for every failed
                                             allocation.
                       For any of these options, if 
size is not specified,
                       the default value of 64k is used.  The 
size parameter
                       must be an integer that can be qualified with K, M,
                       G, or T to specify kilobytes, megabytes, gigabytes,
                       or terabytes, respectively.
                       Logs that are not listed or that have either a size
                       of 0 or an invalid size are disabled.
                       The log is disabled if during initialization the
                       requested amount of storage cannot be allocated.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Unstable        |
       +--------------------+-----------------+
       |MT-Level            | MT-Safe         |
       +--------------------+-----------------+
SEE ALSO
       mdb(1), 
abort(3C), 
signal(3C), 
umem_cache_create(3MALLOC),       
umem_setmtbf(3MALLOC), 
attributes(7)       Modular Debugger Guide:
       https://illumos.org/books/mdb/
WARNINGS
       When 
libumem aborts the process using 
abort(3C), any existing signal
       handler for 
SIGABRT is called. If the signal handler performs
       allocations, undefined behavior can result.
NOTES
       Some of the debugging features work only for allocations smaller than
       16 kilobytes in size. Allocations larger than 16 kilobytes could have
       reduced support.
       Activating any of the library's debugging features could
       significantly increase the library's memory footprint and decrease
       its performance.
                              December 9, 2017           UMEM_DEBUG(3MALLOC)