diff options
Diffstat (limited to 'docs/gettingstarted/troubleshooting/sanitizer.rst')
-rw-r--r-- | docs/gettingstarted/troubleshooting/sanitizer.rst | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/docs/gettingstarted/troubleshooting/sanitizer.rst b/docs/gettingstarted/troubleshooting/sanitizer.rst new file mode 100644 index 00000000000..d2c8b1181d6 --- /dev/null +++ b/docs/gettingstarted/troubleshooting/sanitizer.rst @@ -0,0 +1,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 }" + .... + |