50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
================
 | 
						|
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
 | 
						|
=====
 | 
						|
 | 
						|
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
 | 
						|
================
 | 
						|
 | 
						|
`<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>`_
 |