Home | History | Annotate | Download | only in docs
      1 ================
      2 LeakSanitizer
      3 ================
      4 
      5 .. contents::
      6    :local:
      7 
      8 Introduction
      9 ============
     10 
     11 LeakSanitizer is a run-time memory leak detector. It can be combined with
     12 :doc:`AddressSanitizer` to get both memory error and leak detection, or
     13 used in a stand-alone mode. LSan adds almost no performance overhead
     14 until the very end of the process, at which point there is an extra leak
     15 detection phase.
     16 
     17 Usage
     18 =====
     19 
     20 LeakSanitizer is only supported on x86\_64 Linux. In order to use it,
     21 simply build your program with :doc:`AddressSanitizer`:
     22 
     23 .. code-block:: console
     24 
     25     $ cat memory-leak.c
     26     #include <stdlib.h>
     27     void *p;
     28     int main() {
     29       p = malloc(7);
     30       p = 0; // The memory is leaked here.
     31       return 0;
     32     }
     33     % clang -fsanitize=address -g memory-leak.c ; ./a.out
     34     ==23646==ERROR: LeakSanitizer: detected memory leaks
     35     Direct leak of 7 byte(s) in 1 object(s) allocated from:
     36         #0 0x4af01b in __interceptor_malloc /projects/compiler-rt/lib/asan/asan_malloc_linux.cc:52:3
     37         #1 0x4da26a in main memory-leak.c:4:7
     38         #2 0x7f076fd9cec4 in __libc_start_main libc-start.c:287
     39     SUMMARY: AddressSanitizer: 7 byte(s) leaked in 1 allocation(s).
     40 
     41 To use LeakSanitizer in stand-alone mode, link your program with
     42 ``-fsanitize=leak`` flag. Make sure to use ``clang`` (not ``ld``) for the
     43 link step, so that it would link in proper LeakSanitizer run-time library
     44 into the final executable.
     45 
     46 More Information
     47 ================
     48 
     49 `<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>`_
     50