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)

tribblix@gmail.com :: GitHub :: Privacy