Отладка кода Visual Studio: исходный код, а затем запуск в той же оболочке - PullRequest
1 голос
/ 08 октября 2019

Мой текущий рабочий процесс для проекта выглядит следующим образом:

  • сборка проекта (через catkin)
  • исходный сценарий setup.sh (сгенерированный catkin, что я бы не стал)не хотелось бы изменять) установку переменных среды и имен, необходимых для моего исполняемого файла.
  • Запустите «MyProgram», которая доступна только после получения сценария «setup.sh».

Я хотел бы иметь возможность отладить мой проект в коде Visual Studio. Для этого я определил задачу создания исполняемого файла с помощью catkin, названную «catkin build all», и определил вторую задачу как:

{
  "type": "shell",
  "label": "load programs",
  "command": "source /some_folder/setup.sh",
  "group": "build",
  "dependsOn": ["catkin build all"]
}

, которая является «preLaunchTask» моего lanuch. Конфигурация запуска json.

Запуск отладки корректно скомпилирует проект, но выполнение завершится неудачно с ошибкой «запуск: программа myProgram не существует». Действительно, программа MyProgram не может быть найдена, если файл setup.sh не получен, но должен быть получен с помощью "preLaunchTask".

В моем файле launch.json я также могу установить для "program" значение "/ full / path"/ to / myProgram "вместо" myProgram ", но в этом случае разделяемые библиотеки не найдены, так как setup.sh позаботится об этом.

Я также попытался получить файл setup.sh для оболочки изатем запустите код Visual Studio из той же оболочки, но это не решило проблему «запуск: программа myProgram не существует».

Работают ли задачи на разных оболочках? Как я могу запустить preLaunchTask в той же оболочке, что и последующий программный код? Или какой-нибудь другой совет, как заставить мой рабочий процесс работать?

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Мое решение состоит в том, чтобы использовать файл env_file

. В одном терминале введите ваш файл, например: source /opt/ros/melodic/setup.bash

Восстановите изменения, используя: printenv | grep melodic

Создайте файл .env в своем репо с переменными среды;(кроме PWD)

LD_LIBRARY_PATH=/opt/ros/melodic/lib
ROS_ETC_DIR=/opt/ros/melodic/etc/ros
CMAKE_PREFIX_PATH=/opt/ros/melodic
ROS_ROOT=/opt/ros/melodic/share/ros
PYTHONPATH=/opt/ros/melodic/lib/python2.7/dist-packages
ROS_PACKAGE_PATH=/opt/ros/melodic/share
PATH=/opt/ros/melodic/bin:/home/alexis/.nvm/versions/node/v8.16.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PKG_CONFIG_PATH=/opt/ros/melodic/lib/pkgconfig
ROS_DISTRO=melodic

Добавьте следующую строку в задачу launch.json: "envFile": "${workspaceFolder}/.env"

Примечание: это можно автоматизировать в prerunTask с помощью:

command: "source /opt/ros/melodic/setup.bash; printenv | grep melodic > ${workspaceFolder}/.env"
1 голос
/ 12 октября 2019

Возможно, это может помочь после увеличения. this Получил информацию от здесь

...