This page has moved to https://docs.px4.io/master/en/debug/simulation_debugging.html.
Click here if you are not redirected.
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.
make clean # only required on first address sanitizer run after a normal build PX4_ASAN=1 make px4_sitl jmavsim
brew install valgrind
sudo apt-get install valgrind
To use valgrind during the SITL simulation:
make px4_sitl_default jmavsim___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:
make px4_sitl_default jmavsim make px4_sitl_default jmavsim___gdb make px4_sitl_default jmavsim___lldb make px4_sitl_default gazebo make px4_sitl_default gazebo___gdb make px4_sitl_default gazebo___lldb
where the last parameter is the <viewer_model_debugger> triplet (using three underscores implies the default 'iris' model).
This will start the debugger and launch the SITL application. In order to break into the debugger shell and halt the execution, hit
Process 16529 stopped * thread #1: tid = 0x114e6d, 0x00007fff90f4430a libsystem_kernel.dylib`__read_nocancel + 10, name = 'px4', queue = 'com.apple.main-thread', stop reason = signal SIGSTOP frame #0: 0x00007fff90f4430a libsystem_kernel.dylib`__read_nocancel + 10 libsystem_kernel.dylib`__read_nocancel: -> 0x7fff90f4430a <+10>: jae 0x7fff90f44314 ; <+20> 0x7fff90f4430c <+12>: movq %rax, %rdi 0x7fff90f4430f <+15>: jmp 0x7fff90f3fc53 ; cerror_nocancel 0x7fff90f44314 <+20>: retq (lldb)
In order to not have the DriverFrameworks scheduling interfere with the debugging session
SIGCONT should be masked in LLDB and GDB:
(lldb) process handle SIGCONT -n false -p false -s false
Or in the case of GDB:
(gdb) handle SIGCONT noprint nostop
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
make px4_sitl_default jmavsim___gdb
is equivalent with
make px4_sitl_default # Configure with cmake make -C build/px4_sitl_default jmavsim___gdb
A full list of the available make targets in the build directory can be obtained with:
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_library) when configuring
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
would suppress optimization of the targets: platforms__posix__px4_layer, modules__systemlib, modules__uORB, examples__px4_simple_app, modules__uORB__uORB_tests and px4.
The targets that can be matched with these regular expressions can be printed with the command:
make -C build/posix_sitl_* list_cmake_targets