| ================ |
| LeakSanitizer |
| ================ |
| |
| .. contents:: |
| :local: |
| |
| Introduction |
| ============ |
| |
| LeakSanitizer is a run-time memory leak detector. It can be combined with |
| :doc:`AddressSanitizer` to get both memory error and leak detection, or |
| used in a stand-alone mode. LSan adds almost no performance overhead |
| until the very end of the process, at which point there is an extra leak |
| detection phase. |
| |
| Usage |
| ===== |
| |
| :doc:`AddressSanitizer`: integrates LeakSanitizer and enables it by default on |
| supported platforms. |
| |
| .. code-block:: console |
| |
| $ cat memory-leak.c |
| #include <stdlib.h> |
| void *p; |
| int main() { |
| p = malloc(7); |
| p = 0; // The memory is leaked here. |
| return 0; |
| } |
| % clang -fsanitize=address -g memory-leak.c ; ASAN_OPTIONS=detect_leaks=1 ./a.out |
| ==23646==ERROR: LeakSanitizer: detected memory leaks |
| Direct leak of 7 byte(s) in 1 object(s) allocated from: |
| #0 0x4af01b in __interceptor_malloc /projects/compiler-rt/lib/asan/asan_malloc_linux.cc:52:3 |
| #1 0x4da26a in main memory-leak.c:4:7 |
| #2 0x7f076fd9cec4 in __libc_start_main libc-start.c:287 |
| SUMMARY: AddressSanitizer: 7 byte(s) leaked in 1 allocation(s). |
| |
| To use LeakSanitizer in stand-alone mode, link your program with |
| ``-fsanitize=leak`` flag. Make sure to use ``clang`` (not ``ld``) for the |
| link step, so that it would link in proper LeakSanitizer run-time library |
| into the final executable. |
| |
| Supported Platforms |
| =================== |
| |
| * Android aarch64/i386/x86_64 |
| * Fuchsia aarch64/x86_64 |
| * Linux arm/aarch64/mips64/ppc64/ppc64le/riscv64/s390x/i386/x86\_64 |
| * macOS aarch64/i386/x86\_64 |
| * NetBSD i386/x86_64 |
| |
| More Information |
| ================ |
| |
| `<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>`_ |