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 20LeakSanitizer is supported on x86\_64 Linux and macOS. In order to use it, 21simply 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 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 46More Information 47================ 48 49`<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>`_ 50