Skip to content

Відлагодження симуляції

Поскільки симуляція виконується на машині-хості, всі інструменти розробки робочого стола доступні.

CLANG Address Sanitizer (Mac OS, Linux)

Засіб очищення адрес Clang може допомогти знайти помилки вирівнювання (шини) та інші помилки пам’яті, такі як помилки сегментації. Команда нижче встановлює правильні параметри компіляції.

sh
make clean # only required on first address sanitizer run after a normal build
PX4_ASAN=1 make px4_sitl jmavsim

Valgrind

sh
brew install valgrind

або

sh
sudo apt-get install valgrind

Для використання valgrind під час симуляції SITL:

sh
make px4_sitl_default jmavsim___valgrind

Запустіть Gazebo Classic SITL без відлагоджувача

За замовчуванням SITL запускається без приєднаного відлагоджувача при використанні будь-якого симулятора:

sh
make px4_sitl_default gz
make px4_sitl_default gazebo-classic
make px4_sitl_default jmavsim

Для Gazebo Classic (тільки) ви також можете запустити симулятор з прикріпленим відладчиком. Зверніть увагу, що ви повинні вказати тип транспортного засобу в цільовому симуляторі, як показано нижче:

sh
make px4_sitl_default gazebo-classic_iris_gdb
make px4_sitl_default gazebo-classic_iris_lldb

Це запустить відлагоджувач та запустить додаток SITL з Gazebo та симулятором Iris. Для того щоб увійти в оболонку відладки та зупинити виконання, натисніть CTRL-C:

sh
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)

Щоб не дозволити плануванню DriverFrameworks втручатися у сеанс налагодження, SIGCONT повинен бути замаскований у LLDB та GDB:

sh
(lldb) process handle SIGCONT -n false -p false -s false

Або у випадку GDB:

sh
(gdb) обробка SIGCONT noprint nostop

Після цього оболонки lldb або gdb працюють як звичайні сеанси, будь ласка, зверніться до документації LLDB / GDB.

Останній параметр, триплет <viewer_model_debugger>, фактично передається make у каталозі збірки, отже

sh
make px4_sitl_default gazebo-classic_iris_gdb

еквівалентний з

sh
make px4_sitl_default   # Configure with cmake
make -C build/px4_sitl_default classic_iris_gdb

Повний список доступних цілей make в каталозі збірки можна отримати за допомогою:

sh
make help

Прикріплення GDB до запущеного SITL

Ви також можете розпочати симуляцію, а потім прикріпити gdb:

  1. У одному термінальному вікні введіть команду для запуску вашої симуляції:

    sh
    make px4_sitl_default gazebo-classic

    Під час виконання сценарію зверніть увагу на вихідний текст SITL COMMAND:, розташований праворуч від великого тексту "PX4". Він перерахує місце розташування вашого файлу px4 bin для подальшого використання.

    sh
    SITL COMMAND: "<px4 bin file>" "<build dir>"/etc
    
    ______  __   __    ___
    | ___ \ \ \ / /   /   |
    | |_/ /  \ V /   / /| |
    |  __/   /   \  / /_| |
    | |     / /^\ \ \___  |
    \_|     \/   \/     |_/
    
    px4 starting.
    
    INFO  [px4] startup script: /bin/sh etc/init.d-posix/rcS 0
    INFO  [init] found model autostart file as SYS_AUTOSTART=10015
  2. Відкрийте ще один термінал та введіть:

    sh
    ps -a

    Вам слід зафіксувати PID процесу з назвою "PX4"

    (У цьому прикладі це 14149)

    sh
    atlas:~/px4/main/PX4-Autopilot$ ps -a
        PID TTY          TIME CMD
    1796 tty2     00:01:59 Xorg
    1836 tty2     00:00:00 gnome-session-b
    14027 pts/1    00:00:00 make
    14077 pts/1    00:00:00 sh
    14078 pts/1    00:00:00 cmake
    14079 pts/1    00:00:00 ninja
    14090 pts/1    00:00:00 sh
    14091 pts/1    00:00:00 bash
    14095 pts/1    00:01:23 gzserver
    14149 pts/1    00:02:48 px4
    14808 pts/2    00:00:00 ps
  3. Потім введіть у тому ж вікні

    sh
    sudo gdb [px4 bin file path (from step 1) here]

    Наприклад,

    sh
    sudo gdb /home/atlas/px4/base/PX4-Autopilot/build/px4_sitl_default/bin/px4

    Тепер ви можете прикріпитися до екземпляра PX4, введіть PID, вказаний у кроці 2.

    sh
    attach [PID on px4]

    Тепер у вас повинен бути інтерфейс GDB для налагодження.

Оптимізація компілятора

Можливо приглушити оптимізацію компілятора для вказаних виконуваних файлів та/або модулів (доданих за допомогою cmake з add_executable або add_library) при налаштуванні для posix_sitl_*. Це може бути зручним, коли необхідно пройтися по коду з відлагоджувачем або роздрукувати змінні, які інакше були б оптимізовані.

Для цього встановіть змінну середовища PX4_NO_OPTIMIZATION як список регулярних виразів, розділених крапкою з комою, які відповідають цілям, які потрібно компілювати без оптимізації. Ця змінна середовища ігнорується, коли конфігурація не є posix_sitl_*.

Наприклад,

sh
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.

Цілі, які можуть відповідати цим регулярним виразам, можна надрукувати за допомогою команди:

sh
make -C build/posix_sitl_* list_cmake_targets