Добрый день.
В настройках BareMetal можно создать провайдер сервера отладки с типом Generic или OpenOCD. При использовании типа OpenOCD при отладке QtCreator сначала запускает экземпляр openocd, потом запускает gdb и начинает отлаживать - это всё прекрасно работало всегда. Понадобилось мне подключиться к стороннему серверу отладки - я его запускаю отдельно сам. Создал тип провайдера Generic, указал адрес хоста и порт, к которым должен подключаться gdb. Но QtCreator при старте отладки упорно пытается запустить сервер, которого нет, и не справившись с этим даже не пытается запустить gdb.
Посмотрел код классов родительского GdbServerProvider и наследников GenericGdbServerProvider (и OpenOcdGdbServerProvider для сравнения). У родителя есть функция GdbServerProvider::targetRunner, которая возвращает
заглушку GdbServerProvider::command(). У наследника
OpenOcdGdbServerProvider::command() возвращается команда запуска openocd. У GenericGdbServerProvider функции command() нету (по идее и не нужна), но QtCreator зачем-то вызывает заглушку родительского класса...
Это же явный баг? Пока что сделал по-простому - добавил для GenericGdbServerProvider настроек: путь к исполняемому файлу и аргументы для него (
ссылка на коммит). В принципе, это работает (и даже чем-то удобно - теперь я запускаю сервер не в отдельной консоли, а QtCreator делает это сам. Правда он его почему-то не останавливает). Но, когда хочу подключиться к удаленному серверу, всё-равно приходится указывать путь к любому исполняемому файлу, лишь бы QtCreator не споткнулся на его запуске и запустил gdb.
Вопрос: я что-то делаю не так и Generic провайдер нужно использовать как-то по другому? Если это баг, то как правильно отучить QtCreator запускать несуществующий сервер?