Simulation Debugging

As the simulation is running on the host machine, all the desktop development tools are available.

The Clang address sanitizer can help to find alignment (bus) errors and other memory faults like segmentation faults. The command below sets the right compile options.

or

  1. sudo apt-get install valgrind

SITL can be launched with and without debugger attached and with either jMAVSim or Gazebo as simulation backend. This results in the start options below:

  1. make posix_sitl_default jmavsim
  2. make posix_sitl_default jmavsim___lldb
  3. make posix_sitl_default gazebo
  4. make posix_sitl_default gazebo___gdb
  5. make posix_sitl_default gazebo___lldb
  6. make posix_sitl_lpe jmavsim___gdb
  7. make posix_sitl_lpe gazebo
  8. make posix_sitl_lpe gazebo___gdb
  9. make posix_sitl_lpe gazebo___lldb

In order to not have the DriverFrameworks scheduling interfere with the debugging session SIGCONT should be masked in LLDB and GDB:

  1. (lldb) process handle SIGCONT -n false -p false -s false

Or in the case of GDB:

After that the The lldb or gdb shells behave like normal sessions, please refer to the LLDB / GDB documentation.

The last parameter, the <viewer_model_debugger> triplet, is actually passed to make in the build directory, so

  1. make posix_sitl_lpe jmavsim___gdb

is equivalent with

  1. make help

but for your convenience, a list with just the <viewer_model_debugger> triplets
is printed with the command

    It is possible to suppress compiler optimization for given executables and/or
    modules (as added by cmake with add_executable or add_library) when configuring
    for posix_sitl_*. This can be handy when it is necessary to step through code
    with a debugger or print variables that would otherwise be optimized out.

    To do so, set the environment variable PX4_NO_OPTIMIZATION to be a semi-colon
    separated list of regular expressions that match the targets that need
    to be compiled without optimization. This environment variable is ignored
    when the configuration isn't posix_sitl_*.

    For example,

    1. export PX4_NO_OPTIMIZATION='px4;^modules__uORB;^modules__systemlib$'

    would suppress optimization of the targets: platforms__posix__px4_layer, modules__systemlib, modules__uORB, examples__px4_simple_app, modules__uORB__uORB_tests and px4.