diff options
Diffstat (limited to 'docs/LeakSanitizer.rst')
-rw-r--r-- | docs/LeakSanitizer.rst | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/docs/LeakSanitizer.rst b/docs/LeakSanitizer.rst index 85918088cc..c3cceccd28 100644 --- a/docs/LeakSanitizer.rst +++ b/docs/LeakSanitizer.rst @@ -9,21 +9,39 @@ Introduction ============ LeakSanitizer is a run-time memory leak detector. It can be combined with -:doc:`AddressSanitizer` to get both memory error and leak detection. -LeakSanitizer does not introduce any additional slowdown when used in this mode. -The LeakSanitizer runtime can also be linked in separately to get leak detection -only, at a minimal performance cost. - -Current status -============== - -LeakSanitizer is turned on by default, but it is only supported on x86\_64 -Linux. - -The combined mode has been tested on fairly large software projects. The -stand-alone mode has received much less testing. - -There are plans to support LeakSanitizer in :doc:`MemorySanitizer` builds. +: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 +===== + +LeakSanitizer is only supported on x86\_64 Linux. In order to use it, +simply build your program with :doc:`AddressSanitizer`: + +.. 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 ; ./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. More Information ================ |