LMDBG(1)

NAME
lmdbg - memory debugging tool

SYNOPSIS
lmdbg [OPTIONS] <prog> [args...]

DESCRIPTION
lmdbg runs an external program prog , collects run-time information and saves it to a specified log file. More particulary, lmdbg is able of: decoding all symbols in the source code (function names, file name and position in the file); discovering all memory leaks ( -M default ); finding per-stacktrace memory leaks and ranking them from the largest to the smallest ( -M leaks ); gathering (and ranking) various types of per-stacktrace run time statistics, such as the highest memory consumption ( -M peak ), the number of calls to memory allocation functions ( -M allocs ) and the highest size of memory allocated by a single invocation of malloc function ( -M max ). To accomplish the above tasks, lmdbg , as a meta tool, manages a set of low level lmdbg-* utilities, namely, lmdbg-run, lmdbg-leaks, lmdbg-sym, lmdbg-sysleaks, lmdbg-sort and lmdbg-stat.

OPTIONS

-h  Display the help message.

-V  Display the lmdbg version.

-o filename
    Specify the log file to save data to.

-M mode
    Specify the task to do, mode is either of the following:

    d or default
        Show all stacktraces with memory leaks. This is the default.

    l or leaks
        Rank stacktraces by memory leaks.

    p or peak
        Rank stacktraces by the peak memory consumption.

    a or allocs
        Rank stacktraces by the number of calls to memory allocation functions.

    m or max
        Rank stacktraces by the highest amount of memory allocated in a single invocation of malloc function.

-c filename
    This option is passed to lmdbg-sysleaks(1).

-a  This option is passed to lmdbg-sym(1).

-g  This option is passed to lmdbg-sym(1).

-n  This option is passed to lmdbg-run(1).

-T num
    This option is passed to lmdbg-run(1).

-B num
    This option is passed to lmdbg-run(1).

-v  Enable verbose mode.

FILES

~/.lmdbg.conf or /usr/pkg/etc/lmdbg.conf
    lmdbg configuration file

EXAMPLE
$ cat test3.c #include <stdlib.h> int main () {
   int i;
   void *p1, *p2;
   p1 = malloc (900);
   for (i=0; i < 3; ++i){
      p2 = realloc (NULL, 10+300*i);
   }
   free (p1);
   free (p2);
   return 0; } $ cc -O0 -g -o test3 test3.c $ lmdbg -o log ./test3; cat log realloc ( NULL , 10 ) --> 0xbb901040 num: 2
      lmdbg.c:140 log_stacktrace
      lmdbg.c:545 realloc
      test3.c:9 main

realloc ( NULL , 310 ) --> 0xbb912140 num: 3
      lmdbg.c:140 log_stacktrace
      lmdbg.c:545 realloc
      test3.c:9 main

$ lmdbg -M leaks -o log ./test3; cat log info progname ./test3 info stat total_allocs: 2 info stat total_free_cnt: 0 info stat total_leaks: 320 stacktrace peak: 320 max: 310 allocs: 2 leaks: 320
      lmdbg.c:140 log_stacktrace
      lmdbg.c:545 realloc
      test3.c:9 main

$ lmdbg -M peak -o log ./test3; cat log info progname ./test3 info stat total_allocs: 4 info stat total_free_cnt: 2 info stat total_leaks: 320 stacktrace peak: 930 max: 610 allocs: 3 leaks: 320
      lmdbg.c:140 log_stacktrace
      lmdbg.c:545 realloc
      test3.c:9 main

stacktrace peak: 900 max: 900 allocs: 1
      lmdbg.c:140 log_stacktrace
      lmdbg.c:509 malloc
      test3.c:7 main

$ lmdbg -M max -o log ./test3; cat log info progname ./test3 info stat total_allocs: 4 info stat total_free_cnt: 2 info stat total_leaks: 320 stacktrace peak: 900 max: 900 allocs: 1
      lmdbg.c:140 log_stacktrace
      lmdbg.c:509 malloc
      test3.c:7 main

stacktrace peak: 930 max: 610 allocs: 3 leaks: 320
      lmdbg.c:140 log_stacktrace
      lmdbg.c:545 realloc
      test3.c:9 main

$ lmdbg -M allocs -o log ./test3; cat log info progname ./test3 info stat total_allocs: 4 info stat total_free_cnt: 2 info stat total_leaks: 320 stacktrace peak: 930 max: 610 allocs: 3 leaks: 320
      lmdbg.c:140 log_stacktrace
      lmdbg.c:545 realloc
      test3.c:9 main

stacktrace peak: 900 max: 900 allocs: 1
      lmdbg.c:140 log_stacktrace
      lmdbg.c:509 malloc
      test3.c:7 main

$

SEE ALSO
lmdbg-run(1), lmdbg-sym(1), lmdbg-stat(1), lmdbg-sort(1), lmdbg-grep(1), lmdbg-leaks(1), lmdbg-sysleaks(1), lmdbg-strip(1), lmdbg-modules(1)

AUTHOR
Aleksey Cheusov <vle@gmx.net>