aboutsummaryrefslogtreecommitdiffstats
path: root/docs/gettingstarted/troubleshooting/sanitizer.rst
blob: d2c8b1181d6ff6510f43c1e03e3e62b1a3bbb0bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
.. _sanitizer:

*****************
Google Sanitizers
*****************

VPP is instrumented to support `Google Sanitizers <https://github.com/google/sanitizers>`_.
As of today, only `AddressSanitizer <https://github.com/google/sanitizers/wiki/AddressSanitizer>`_
is supported, both for GCC and clang.

AddressSanitizer
================

`AddressSanitizer <https://github.com/google/sanitizers/wiki/AddressSanitizer>`_  (aka ASan) is a memory
error detector for C/C++. Think Valgrind but much faster.

In order to use it, VPP must be recompiled with ASan support.
See developer documentation on prerequisites for :ref:`building VPP <building>`.

ASan support is implemented as a cmake build option,
so all VPP targets should be supported. For example:

.. code-block:: console

    # build a debug image with ASan support:
    $ make rebuild VPP_EXTRA_CMAKE_ARGS=-DVPP_ENABLE_SANITIZE_ADDR=ON
    ....

    # build a release image with ASan support:
    $ make rebuild-release VPP_EXTRA_CMAKE_ARGS=-DVPP_ENABLE_SANITIZE_ADDR=ON
    ....

    # build packages in debug mode with ASan support:
    $ make pkg-deb-debug VPP_EXTRA_CMAKE_ARGS=-DVPP_ENABLE_SANITIZE_ADDR=ON
    ....

    # run GBP plugin tests in debug mode with ASan
    $ make test-debug TEST=test_gbp VPP_EXTRA_CMAKE_ARGS=-DVPP_ENABLE_SANITIZE_ADDR=ON
    ....

Once VPP has been built with ASan support you can use it as usual including
under gdb:

.. code-block:: console

    $ gdb --args $PWD/build-root/install-vpp_debug-native/vpp/bin/vpp "unix { interactive }"
    ....