Забавно, что для языка Python нет какого-то единого механизма отладки (или он есть, но не особо распространён). Различные среды программирования предлагают различные решения; здесь будет описан рабочий вариант для Visual Studio Code: ptvsd.
Если отладка будет происходить удалённо, имеет смысл смонтировать удалённую файловую систему в локальную папку. Это можно сделать, например, с помощью пакета sshfs (обычно он есть в репозиториях). Чтобы смонтировать корень удалённой файловой системы, в командной строке надо выполнить:
sshfs username@host.local:/ /path/to/empty/directoryВместо /path/to/empty/directory надо указать путь к пустой локальной директории. В зависимости от настроек ssh, возможно, придётся ввести пароль пользователя username от хоста host.local.
На всех системах, участвующих в процессе, надо установить ptvsd - желательно и для Python2, и для Python3. Это можно сделать через pip:
sudo python -m pip install ptvsd # Python2
sudo python3 -m pip install ptvsd # Python3В Visual Studio Code надо произвести настройку подключения отладчика. Сделать это надо один раз (для каждой системы/папки, в которой будет скрипт/пакет), но делать это придётся "руками":
-
Открываем VS Code, открываем папку, в которой хранится наш скрипт (или пакет, который мы собираемся отлаживать) - здесь очень хорошо подойдёт монтирование удалённой файловой системы.
-
Открываем панель отладчика:
-
Жмём "Create a launch.json file".
-
В выпавшем списке выбираем "Remote attach".
-
Вводим IP/hostname системы, на которой будет происходить отладка (если отладка идёт локально - вводим localhost):
-
Вводим порт, по которому отладчик будет подключаться (например, 3000):
-
Откроется файл launch.json, в котором наши hostname и port будут записаны. Здесь имеет смысл указать, например, path mappings: в remote root надо прописать путь к папке со скриптом/пакетом на удалённой системе:
После этого среда программирования сможет подключаться к отладчику.
Если скрипт запускается тривиально (то есть запуск осуществляется простым python myscript.py или python3 myscript.py), то на той системе, на которой будет происходить запуск, надо выполнить:
python -m ptvsd --host 192.168.0.15 --port 3000 --wait myscript.pyОпция --host указывает, откуда будет происходить подключение отладчика (здесь можно указать 0.0.0.0 - тогда подключение будет ожидаться отовсюду, но это небезопасно). --wait означает, что программа не будет запущена до тех пор, пока отладчик не подключится (чаще всего это желаемое поведение, но случаи разные бывают).
После запуска этой команды можно подключаться к запущенному скрипту:
ROS-ноды, как правило, запускаются через roslaunch. Менять launch-файлы для запуска ноды через python -m ptvsd не всегда удобно; вместо этого можно добавить в начало скрипта запуска строчки:
import ptvsd
ptvsd.enable_attach(address=("192.168.0.15", 3000), redirect_output=True)
ptvsd.wait_for_attach()Здесь в address передаётся пара "хост-порт" (аналогично параметрам --host и --port в команде выше). ptvsd.wait_for_attach() остановит выполнение скрипта до тех пор, пока не произойдёт подключение VSCode.





