1================
2LeakSanitizer
3================
4
5.. contents::
6   :local:
7
8Introduction
9============
10
11LeakSanitizer is a run-time memory leak detector. It can be combined with
12:doc:`AddressSanitizer` to get both memory error and leak detection, or
13used in a stand-alone mode. LSan adds almost no performance overhead
14until the very end of the process, at which point there is an extra leak
15detection phase.
16
17Usage
18=====
19
20:doc:`AddressSanitizer`: integrates LeakSanitizer and enables it by default on
21supported platforms.
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 ; ASAN_OPTIONS=detect_leaks=1 ./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
41To use LeakSanitizer in stand-alone mode, link your program with
42``-fsanitize=leak`` flag. Make sure to use ``clang`` (not ``ld``) for the
43link step, so that it would link in proper LeakSanitizer run-time library
44into the final executable.
45
46Supported Platforms
47===================
48
49* Android aarch64/i386/x86_64
50* Fuchsia aarch64/x86_64
51* Linux arm/aarch64/mips64/ppc64/ppc64le/riscv64/s390x/i386/x86\_64
52* macOS aarch64/i386/x86\_64
53* NetBSD i386/x86_64
54
55More Information
56================
57
58`<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>`_
59