NJAMDPM(1)                                                          NJAMDPM(1)


       njamdpm - Not Just Another Malloc Debugger Post-Mortem


       njamdpm [OPTIONS] <HEAP FILE>


       njamdpm  is  a companion utility that allows you to examine the persis-
       tent 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.


       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 cre-

       -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  meaning-
       ful, issue

       info line *0xaddress

       to obtain the line number of the allocation request, or

       list *0xaddress

       to see the adjacent code as well.


       Eventually I hope to add symbol translation right into njamdpm.


       Mike Perry <mikepery@fscked.org>



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

                              NJAMD - 5 Oct 2000                    NJAMDPM(1)

Man(1) output converted with man2html