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 supported on x86\_64 Linux and OS X. 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 ; 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 | |
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 | |