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 some­
              how  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  align­
              ment  of  your architecture, or as specified by the
              value the NJAMD_ALIGN environment variable had when
              the heap was created.

              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  some­
       thing 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.


AUTHORS

       Mike Perry <mikepery@fscked.org>


SEE ALSO

       http://freshmeat.net/appindex/development/debugging.html

       njamd(3), efence(3), malloc(3), mmap(2), mprotect(2)


Man(1) output converted with man2html