blob: af239943da3f88384f1f7d23f98d1a5a2b4d655a (
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
|
.. _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 and only for the heap.
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. It 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=-DENABLE_SANITIZE_ADDR=ON
....
# build a release image with ASan support:
$ make rebuild-release VPP_EXTRA_CMAKE_ARGS=-DENABLE_SANITIZE_ADDR=ON
....
# build packages in debug mode with ASan support:
$ make pkg-deb-debug VPP_EXTRA_CMAKE_ARGS=-DENABLE_SANITIZE_ADDR=ON
....
# run GBP plugin tests in debug mode with ASan
$ make test-debug TEST=test_gbp VPP_EXTRA_CMAKE_ARGS=-DENABLE_SANITIZE_ADDR=ON
....
Once VPP has been built with ASan support, you can use it as usual. When
running under a debugger it can be useful to disable LeakSanitizer which is
not compatible with a debugger and displays spurious warnings at exit:
.. code-block:: console
$ ASAN_OPTIONS=detect_leaks=0 gdb --args $PWD/build-root/install-vpp_debug-native/vpp/bin/vpp "unix { interactive }"
....
|