Home - mhahnFr/LeakSanitizer GitHub Wiki

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.

⚠️ **GitHub.com Fallback** ⚠️