Skip to content
mhahnFr edited this page Feb 21, 2024 · 15 revisions

Here you can find all information about the LeakSanitizer as well as the documentation of the available API.

The features

Apart from finding memory leaks this sanitizer has a few more sophisticated features:

  • The behaviour can be adjusted.
  • Optional statistical bookkeeping can be queried with a C API.
  • A few additional signal handlers.

Behaviour

The behaviour of this sanitizer can be adjusted using a few variables. They can be set using the C API or as environment variables.

All available variables can be found here.

Tip

  • Example:
LSAN_LEAK_COUNT=100 ./a.out
  • Example using the C API:
#include <lsan_internals.h>

int main(void) {
    __lsan_leakCount = 100;
}

Statistics

The statistical bookkeeping can be activated and queried using the C API.

Activate the statistics using LSAN_STATS_ACTIVE or __lsan_statsActive as described above.

Read the documentation of the full set of functions here.

Tip

Example of printing the statistics:

#include <string.h>         // For strdup(...)
#include <lsan_internals.h> // For __lsan_statsActive

#include <lsan_stats.h>

int main(void) {
    __lsan_statsActive = true;

    void * pointer = strdup("Example leak");

    __lsan_printStats();
    __lsan_printFragmentationStats();
}

Signal handlers

Signal Action
SIGUSR1 Printing the current memory statistics.
SIGUSR2 Printing a stacktrace where the signal was received.
Deadly signal Caught and a stacktrace of the crash is printed.

More about signal handlers here.

Invalid frees

The LeakSanitizer can also help to find invalid de-allocations.

To do so enable LSAN_INVALID_FREE and LSAN_STATS_ACTIVE and deactivate LSAN_INVALID_CRASH (their documentation can be found here).

Example:

LSAN_INVALID_FREE=true LSAN_STATS_ACTIVE=true LSAN_INVALID_CRASH=false ./a.out

Warning

This might lead to falsely detected invalid de-allocations.

If you chase an invalid de-allocation this might still be helpful, though.