forked from OSchip/llvm-project
[Docs] Slightly update LSan documentation.
llvm-svn: 258476
This commit is contained in:
parent
093ae49077
commit
710d9f8385
|
@ -232,6 +232,23 @@ problems happening in certain source files or with certain global variables.
|
|||
type:*BadInitClassSubstring*=init
|
||||
src:bad/init/files/*=init
|
||||
|
||||
Suppressing memory leaks
|
||||
------------------------
|
||||
|
||||
Memory leak reports produced by :doc:`LeakSanitizer` (if it is run as a part
|
||||
of AddressSanitizer) can be suppressed by a separate file passed as
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
LSAN_OPTIONS=suppressions=MyLSan.supp
|
||||
|
||||
which contains lines of the form `leak:<pattern>`. Memory leak will be
|
||||
suppressed if pattern matches any function name, source file name, or
|
||||
library name in the symbolized stack trace of the leak report. See
|
||||
`full documentation
|
||||
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer#suppressions>`_
|
||||
for more details.
|
||||
|
||||
Limitations
|
||||
===========
|
||||
|
||||
|
|
|
@ -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.
|
||||
: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.
|
||||
|
||||
Current status
|
||||
==============
|
||||
Usage
|
||||
=====
|
||||
|
||||
LeakSanitizer is turned on by default, but it is only supported on x86\_64
|
||||
Linux.
|
||||
LeakSanitizer is only supported on x86\_64 Linux. In order to use it,
|
||||
simply build your program with :doc:`AddressSanitizer`:
|
||||
|
||||
The combined mode has been tested on fairly large software projects. The
|
||||
stand-alone mode has received much less testing.
|
||||
.. code-block:: console
|
||||
|
||||
There are plans to support LeakSanitizer in :doc:`MemorySanitizer` builds.
|
||||
$ 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
|
||||
================
|
||||
|
|
Loading…
Reference in New Issue