Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: arhiv6 от Март 01, 2023, 10:42



Название: Плагин BareMetal с типом Generic
Отправлено: arhiv6 от Март 01, 2023, 10:42
Добрый день.

В настройках BareMetal можно создать провайдер сервера отладки с типом Generic или OpenOCD. При использовании типа OpenOCD при отладке QtCreator сначала запускает экземпляр openocd, потом запускает gdb и начинает отлаживать - это всё прекрасно работало всегда. Понадобилось мне подключиться к стороннему серверу отладки - я его запускаю отдельно сам. Создал тип провайдера Generic, указал адрес хоста и порт, к которым должен подключаться gdb. Но QtCreator при старте отладки упорно пытается запустить сервер, которого нет, и не справившись с этим даже не пытается запустить gdb.

Посмотрел код классов родительского GdbServerProvider и наследников GenericGdbServerProvider (и OpenOcdGdbServerProvider для сравнения). У родителя есть функция GdbServerProvider::targetRunner, которая возвращает заглушку GdbServerProvider::command() (https://github.com/arhiv6/qt-creator/blob/a69ff75357d98258502dc1b802d4d066d8b426b0/src/plugins/baremetal/debugservers/gdb/gdbserverprovider.cpp#L103). У наследника OpenOcdGdbServerProvider::command() (https://github.com/arhiv6/qt-creator/blob/a69ff75357d98258502dc1b802d4d066d8b426b0/src/plugins/baremetal/debugservers/gdb/openocdgdbserverprovider.cpp#L80) возвращается команда запуска openocd. У GenericGdbServerProvider функции command() нету (по идее и не нужна), но QtCreator зачем-то вызывает заглушку родительского класса... Это же явный баг?

Пока что  сделал по-простому - добавил для GenericGdbServerProvider настроек: путь к исполняемому файлу и аргументы для него (ссылка на коммит (https://github.com/arhiv6/qt-creator/commit/c98d1fe846fc6c39555c691c9c314826e65a2974)). В принципе, это работает (и даже чем-то удобно - теперь я запускаю сервер не в отдельной консоли, а QtCreator делает это сам. Правда он его почему-то не останавливает). Но, когда хочу подключиться к удаленному серверу, всё-равно приходится указывать путь к любому исполняемому файлу, лишь бы QtCreator не споткнулся на его запуске и запустил gdb.

Вопрос: я что-то делаю не так и Generic провайдер нужно использовать как-то по другому? Если это баг, то как правильно отучить QtCreator запускать несуществующий сервер?


Название: Re: Плагин BareMetal с типом Generic
Отправлено: tux от Март 01, 2023, 21:22
Лучше сразу указывать версии того, на чём вы всё проверяете. Ну и минимальный проект неплохо было бы.


Название: Re: Плагин BareMetal с типом Generic
Отправлено: arhiv6 от Март 02, 2023, 05:33
Прошу прощения. Версии 9.0.2 и 10-beta, OS Ubuntu 22.04.1 x64.