< >
Home » PX4开发指南 » PX4开发指南-13.8.仿真调试

PX4开发指南-13.8.仿真调试

Simulation Debugging

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

CLANG Address Sanitizer (Mac OS, Linux)

  • 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 posix jmavsim

Valgrind

 brew install valgrind
 

or

 sudo apt-get install valgrind

Add instructions how to run Valgrind

Start combinations

  • 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 posix_sitl_default jmavsim
make posix_sitl_default jmavsim___gdb
make posix_sitl_default jmavsim___lldb

make posix_sitl_default gazebo
make posix_sitl_default gazebo___gdb
make posix_sitl_default gazebo___lldb

make posix_sitl_lpe jmavsim
make posix_sitl_lpe jmavsim___gdb
make posix_sitl_lpe jmavsim___lldb

make posix_sitl_lpe gazebo
make posix_sitl_lpe gazebo___gdb
make posix_sitl_lpe 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 CTRL-C :
 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 posix_sitl_lpe jmavsim___gdb
  • is equivalent with
make posix_sitl_lpe    # Configure with cmake
make -C build/posix_sitl_lpe jmavsim___gdb
  • A full list of the available make targets in the build directory can be obtained with:
 make help
  • but for your convenience, a list with just the <viewer_model_debugger> triplets is printed with the command
 make list_vmd_make_targets

Compiler optimization

  • 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,

 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.

  • The targets that can be matched with these regular expressions can be printed with the command:

 make -C build/posix_sitl_* list_cmake_targets

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: px4开发指南