svcadm(1M)을 검색하려면 섹션에서 1M 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
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 runtime debugging features is controlled by environment vari‐
ables.
On Oracle SPARC systems with support for the Application Data Integrity
(ADI) feature the libumem functions also support the ADIHEAP security
extension. When the ADIHEAP security extension is enabled for the call‐
ing program, the libumem functions will use the SPARC Application Data
Integrity APIs to provide detection of buffer overruns, out of bounds
pointers, use after free errors, use after reallocation errors, and
stale pointer errors. For more information, see the adi(7) and sxadm(8)
manual pages.
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).
ENVIRONMENT VARIABLES
UMEM_DEBUG
This variable contains a list of comma-separated options. Unrecog‐
nized options are ignored. Possible options include:
adi_precise
Enable precise mode ADI trapping where memory write errors are
caught a few instructions after the exact instruction is exe‐
cuted. This has an overall performance overhead, but is more
accurate at determining the exact point that an ADI fault
occurred. The default is to use disrupting mode traps. For more
information, see the adi(7) manual page.
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 alloca‐
tion. 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 imple‐
mentation-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:
tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
TRIBUTE VALUE _ Interface StabilityUncommitted _ MT-LevelMT-Safe
SEE ALSO
mdb(1), abort(3C), signal(3C), umem_cache_create(3MALLOC), adi(7),
attributes(7)
Oracle Solaris Modular Debugger Guide
WARNINGS
When libumem aborts the process using abort(3C), any existing signal
handler for SIGABRT is called. If the signal handler performs alloca‐
tions, 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.
Oracle Solaris 11.4 11 May 2021 umem_debug(3MALLOC)