docs: add AddressSanitizer mini-howto 99/23699/4
authorBenoît Ganne <bganne@cisco.com>
Fri, 29 Nov 2019 16:28:30 +0000 (17:28 +0100)
committerDave Barach <openvpp@barachs.net>
Thu, 23 Jan 2020 15:53:35 +0000 (15:53 +0000)
Type: docs

Change-Id: I3bb589d04f15a03166a6d457552ffc316fb02f94
Signed-off-by: Benoît Ganne <bganne@cisco.com>
docs/troubleshooting/index.rst
docs/troubleshooting/sanitizer.rst [new file with mode: 0644]

index 655eb11..f652f3f 100644 (file)
@@ -11,3 +11,4 @@ problem with FD.io VPP implementations.
 
     reportingissues/index.rst
     cpuusage
+    sanitizer
diff --git a/docs/troubleshooting/sanitizer.rst b/docs/troubleshooting/sanitizer.rst
new file mode 100644 (file)
index 0000000..af23994
--- /dev/null
@@ -0,0 +1,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 }"
+    ....
+