Интерактивная система просмотра системных руководств (man-ов)
njamdpm (1)
>> njamdpm (1) ( Linux man: Команды и прикладные программы пользовательского уровня )
NAME
njamdpm - Not Just Another Malloc Debugger Post-Mortem
SYNOPSIS
njamdpm
[OPTIONS] <HEAP FILE>
DESCRIPTION
njamdpm is a companion utility that allows you to examine the persistent heap
saved by
libnjamd(3)
You can do things like query for certain addresses, show memory leaks, and show
all past allocated memory. As of
NJAMD
0.6.0,
gdb(1)
is required to make sense of the return addresses.
USAGE
Options
HEAP FILE
The heap file will be in the current directory with a name of the form
njamd-<pid>-heap,
but only if
NJAMD_PERSISTANT_HEAP
was in the environment at the time of
program execution
-a address
Search through the heap file for a chunk of memory that contains
address.
This can be VERY helpful when using gdb. Simply find the address that you
accessed to cause the segmentation fault, use
njamdpm
to look it up in the heap, and viola! You have all sorts of info about the
chunk: When it was allocated, when it was freed, how big is is, etc.
-d depth
When displaying return address info, only display
depth
return addresses. The max is specified in ./include/lib/njamd.h in the define
TRACE_DEPTH
(default is 3).
-t
Trim the heap file down to only the used portion. This is useful if for some
reason the program somehow exits without trimming its own heap file down
first. Note that when the heap file appears huge it's not actually taking up
disk space.
-s
Dump basic status info about peak memory usage, NJAMD overhead, etc. Useful
for determining if you should buy more ram, or write me an angry email :)
-l
Dump memory leaks in the heap. Also shows you info about where the memory was
leaked, along with a total. Do note that this total and the subtotals are
aligned
bytes. They are aligned to the alignment of your architecture, or as
specified by the value the
NJAMD_ALIGN
environment variable had when the heap was created.
-f
Dump freed memory in the heap. This option is only available if
LIBNJAMD
ran without
NJAMD_CHK_FREE=none
set.
Using gdb with njamdpm
When a segmentation fault happens, it's because, of course, you accessed an
invalid address. So all you need to do is get gdb to give you the address you
accessed, and then feed it to njamdpm. Ie if the segfault occurs on a line
that does buf[i] = 2, issue
print &buf[i]
to gdb. Note that
libnjamd(3)
now has a function __nj_ptr_info that can be called from gdb that performs
all this without njamdpm.
To get gdb to translate these return addresses into something meaningful,
issue
info line *0xaddress
to obtain the line number of the allocation request, or
list *0xaddress
to see the adjacent code as well.
NOTES
Eventually I hope to add symbol translation right into njamdpm.