Отладка компонентов REDHAWK

Я не могу заставить отладку работать.

Я использую версию REDHAWK 2.1.0 и пытаюсь создавать собственные компоненты.

Я могу заставить релизную версию работать и работать.

Вот что я делаю: я создал очень простой пользовательский компонент, который принимает входные данные, умножает их на два и отправляет в выходной поток, очень просто. Сейчас пытаюсь запустить этот компонент в режиме отладки в песочнице, мгновенный сбой. Единственное, что я вижу, это последняя запись стека вызовов, которая

boost::shared_ptr<rh_logger::Logger>::operator->() at shared_ptr.hpp:653

Если я решу запустить свой компонент без отладки, все будет работать. Он даже выполняет умножение.

Я понятия не имею, что происходит, по-видимому, этот класс интеллектуальных указателей выполняет проверку утверждения, чтобы проверить указатель, который он возвращает, и в конечном итоге дает сбой, потому что он равен нулю. Будучи оператором ->, это кажется довольно опасным. SIGSEGV - это ошибка, интересно, вызывает ли это BOOST_ASSERT при сбое?


Операционная система — CentOS 7 64 бит, работает на обычном процессоре Intel для настольных ПК, не помню какой.

Я установил REDHAWK, загрузив репозиторий, как указано в части 2.2 руководства REDHAWK.

Новый компонент был создан с помощью REDHAWK IDE (на основе eclipse), я выбрал C++ в качестве языка программы. Кажется, это общая библиотека, и когда я запускаю ее, запускается процесс под названием ComponentHost.

Я пытаюсь запустить компонент в песочнице, щелкнув правой кнопкой мыши компонент в меню «Проект» и выбрав «Отладка как — компонент в песочнице». Таким образом работает запуск компонента в режиме Release.


person 0xbaadf00d    schedule 15.05.2017    source источник
comment
Этот материал действительно убивает REDHAWK для меня. Я столкнулся с проблемой в каком-то коде, из-за чего он падает.   -  person 0xbaadf00d    schedule 29.05.2017


Ответы (1)


Я могу отлаживать компонент через песочницу Python, поэтому всего пара переменных, которые помогут сузить круг, с моей тестовой системой в []:

  1. Какая операционная система? [ЦентОС 7]
  2. REDHAWK установлен из исходников или RPM? [об/мин]
  3. Является ли это новым компонентом на основе совместно используемой библиотеки C++ (тип точки входа — «SharedLibrary») или исполняемым («Executable»)? [обе]
  4. Как вы запускаете компонент? Через песочницу Python с аргументом запуска «debugger='gdb'»? Любые другие аргументы запуска?

Другой возможный подход к отладке состоит в том, чтобы запустить компонент в обычном режиме, а затем подключить GDB из другого окна терминала.

Сначала найдите компонент процесса:

  • Если это общая библиотека:

    ps -o pid,comm -C ComponentHost

  • Если это исполняемый файл (где "" — имя исполняемого файла компонента):

    ps -o pid,cmd -C <name>

Надеюсь, понятно, какой процесс является вашим целевым компонентом. Если вы запускаете несколько компонентов общей библиотеки из одной песочницы, все они будут частью одного и того же экземпляра ComponentHost.

Затем подключитесь к процессу с помощью GDB:

gdb -p <pid>

По сути, так песочница подключает GDB; однако его независимый запуск позволяет вам сначала настроить поток по своему вкусу, прежде чем подключать отладчик.

person Justin Irwin    schedule 31.05.2017
comment
Да, я думал сделать это таким образом. Я подумал, что мог бы использовать KDevelop для отладки, так как он предоставляет удобный интерфейс для gdb. Возможно, я мог бы даже превратить его в работоспособную вещь, заставив запуск запускать необходимые команды Python для запуска компонента в песочнице. - person 0xbaadf00d; 01.06.2017
comment
(Проверка по вашей ссылке в ветке другого пользователя.) Я не перешел к REDHAWK 2.1, так как это предварительный выпуск (согласно тегу на репозиторий, так что на всякий случай). - person Thomas; 01.06.2017