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)