Qt creator не работает отладка linux

Обновлено: 04.07.2024

удаленная отладка gdb и qtcreator (удаленная отладка компьютера и встроенного Linux)

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

Прежде всего, это настольный компьютер с именем pc, а имя ноутбука - notebook.
использовать компьютер в качестве сервера

1.1 установка gdb и установка gdbserver

Поскольку ubantu14 установлен на обоих компьютерах, он поставляется с gdb

1.2 Новый тестовый проект

Создайте новый проект remotedebug.Цель проекта - установить точку останова для просмотра переменной k во время отладки.
main.cpp

CMakeLists.txt плюс параметр отладки add_compile_options (-g)

1.3 Удаленная отладка

1.3.1 Использование qtcreator для удаленной отладки

(3) Используйте ssh для входа в ноутбук

Открытие может быть успешным.
(4) Запустите сервер GDB в записной книжке.

192.168.233.138 - это IP-адрес компьютера, 8888 - это порт связи / home / rootroot / remotedebug - исполняемая программа для отладки.

Подскажите, что не установлен gdbserver
ноутбук, установка gdbserver


Выполнить снова
вывод


4. Настроить в Qtcreator
Debug—>Start Debugging—>Attach to Rmote Debug Server..

Заполните порт сервера портом, замените адрес сервера IP-адресом ноутбука и заполните локальный исполняемый файл локальным скомпилированным файлом remotedebug
После нажатия кнопки "Отладка" можно начать отладку.

2.1 Установка gdb и gdbserver на машину разработки

2.1.2 Скомпилируйте и установите версию gdb для ПК

(1) tar xvzf gdb-7.10.1.tar.gz
(2)./configure –target=arm-openwrt-linux –prefix==/home/rootroot/ProgramFiles/gdbOpenwrt
(исполняемый файл после компиляции и установки помещается в / home / rootroot / ProgramFiles / gdbOpenwrt, этот каталог можно настроить)
(3)make
(4)make install
После компиляции и установки просмотрите файл arm-openwrt-linux-gdb в / home / rootroot / ProgramFiles / gdbOpenwrt / bin /

2.1.3 Скомпилируйте gdb и gdbserver, работающие на openwrt

Поскольку я не компилировал gdb и gdbserver, работающие на openwrt, я использовал эту версию, скомпилированную другими, поэтому следующие шаги приведены только для справки.
(1) По-прежнему введите gdb / gdbserver / в распакованном виде gdb-7.10.1
(2)./configure –target=arm-openwrt-linux –prefix=/home/rootroot/ProgramFiles/gdbOpenwrtR16
(3) make CC = arm-openwrt-linux-gcc (среди которых arm-openwrt-linux-gcc - мой компилятор)
(4) сделать установку установленной в gdbOpenwrtR16
(5) Скопируйте gdb и gdbserver в OpenWRT

2.2 Новый тестовый проект

Тестовый проект threaddebugtest запускает два потока. Когда k == 10 в потоке World (), назначается нулевой адрес и возникает ошибка сегментации. Цель состоит в том, чтобы найти место, где программа не работает во время удаленной отладки.
main.cpp

CMakeLists.txt плюс параметры встроенного компилятора

2.3 Встроенная удаленная отладка

2.3.1 отладка gdb

(1) Сначала получите IP-адрес
ifconfig
IP-адрес компьютера - 192.168.233.138, IP-адрес руки - 192.168.233.103.
(2) Скомпилируйте проект, перейдите в каталог файлов скомпилированной программы и поместите скомпилированную программу threaddebugtest в папку openwrt / mnt / UDISK /

(3) Используйте ssh для входа в openwrt

Открытие может быть успешным.
(4) Запустить сервер GDB в openwrt

192.168.233.138 - это IP-адрес компьютера, 8888 - это порт связи, а / mnt / UDISK / threaddebugtest - исполняемая программа, которую нужно отлаживать.
Результатом является
Process /mnt/UDISK/threaddebugtest created; pid = 708
Listening on port 8888
(5) Запустить программу удаленной отладки GDB на ПК.
Перейдите в каталог threaddebugtest на ПК,
выполнить arm-openwrt-linux-gdb на ПК

2.3.2 Использование Qtcreator для отладки


(1) Сначала добавьте комплекты

Как показано на рисунке, добавьте набор с именем OpenWRT, установите для компилятора
arm-openwrt-linux-gcc
Отладчик - это GDB, только что скомпилированный на компьютере.
arm-openwrt-linux-gdb
Обратите внимание на следующее
Версия Qt должна выбрать NONE, иначе набор не будет увеличиваться, и впереди будет красное предупреждение

(2) Выполните удаленную отладку
выберите «Отладка» -> «Начать отладку» -> «Подключиться к серверу отладки Rmote».
kit: выберите OpenWRT, порт сервера укажите порт, переопределите адрес сервера, введите IP-адрес openwrt, локальный исполняемый файл заполнит локальный скомпилированный файл threaddebugtest
, как показано



, наконец, успешно после запуска!

Можно запустить мое приложение с правами root, используя sudo это:

Можно ли отладить мое приложение Qt с помощью привилегированных пользователей с помощью QtCreator? Как я могу сделать это в системе Ubuntu?

  1. Перейти к Tools-> Options-> Environment
  2. В закладке General под **System** Group есть Terminal вариант .
  3. По умолчанию установлено значение /usr/bin/xterm -e . Замените его на /usr/bin/xterm -e sudo или /usr/bin/gnome-terminal -x sudo .
  4. Нажмите Apply и OK кнопки .
  5. Под селектором режимов нажмите Projects , выберите Run Option. Под Run Group Box выберите Run in Terminal .

Помните: sudo опция должна быть там

Редактировать /etc/sudoers используя sudo visudo

В следующий раз, когда вы запустите программу, она будет запущена в новом xterm или gnome-terminal с разрешением суперпользователя и запросит пароль root .

У меня не работает, после ввода пароля sudo Выходные данные приложения сообщают, что «Отладка завершена», ни один из прерываний на самом деле не ломается

Я решил это, запустив Qt Creator от имени пользователя root.

Теперь он получит разрешение root для приложения, когда я скомпилирую и отладлю. Теперь возможно отладить мое приложение с привилегиями root.

Это очень, очень, очень глупая вещь. Я не пытаюсь быть оскорбительным. Глупый в том смысле, что это не умная вещь, чтобы сделать. И я уверен, что большинство людей никогда не будут делать это. Не будь пользователем Windows. Не запускайте все как root.

Запуск этого как root - ужасная идея. Вместо этого используйте исходный код и заставьте qtcreator использовать sudo для запуска gdb следующим образом. Требует, чтобы вы запустили qtcreator из tty и auth sudo перед запуском qtcreator, или сконфигурировали своего пользователя для sudo без пароля (не рекомендуется). Я напишу более полное решение позже.

Это заняло у меня 1-2 часа кода / отладки без предварительного знания QT. Большая часть этого времени была потрачена на ожидание завершения компиляции

--- qtcreator-3.0.1.orig/src/plugins/debugger/gdb/gdbprocess.cpp +++ qtcreator-3.0.1/src/plugins/debugger/gdb/gdbprocess.cpp @@ -59,7 +59,11 @@ QByteArray GdbProcess::readAllStandardEr

Я запускал программу из терминала с сервером GDB (от имени root), а затем подключался к серверу с помощью GDB из QtCreator. Вы бы запустили gdbserver примерно так:

Здесь вы размещаете сервер с портом 2345. Вы также можете проверить, действительно ли ваше приложение работает с UID 0.

Теперь в Qt Creator перейдите в Debug -> Start Debugging -> Attach to Running Debug Server. Заполните форму . наиболее важным является порт и адрес сервера. Я выбрал 127.0.0.1 и 2345. Вы можете выбрать break в main для разрыва в начале программы. Сервер GDB не запускает программу, пока вы не подключитесь.

На форуме поддержки Qt были рекомендованы следующие действия:

В Qt Creator добавьте удаленное устройство Linux в Параметры -> Устройства. Установите его адрес как localhost, а пользователя как root. Создайте пару ключей аутентификации и вставьте открытый ключ в /root/.ssh/authorized_keys . Затем клонируйте Desktop kit в Options -> Kits и установите устройство для нового набора на устройство, которое вы создали на предыдущем шаге.

Теперь, когда вы начинаете отладку, Qt Creator должен автоматически подключиться через ssh к localhost от имени root, запустить gdbserver и выполнить отладку.

Это работает для запуска без отладки тоже.

Возможно, вам следует настроить установку вашей программы на удаленном хосте, но это другая история, и это делается по-разному для Qmake и QBS.

Репутация: нет
Всего: 2

В общем прошу объяснить, как мне подключить отладчик к Qt, не обязательно один из этих двух, любой, главное чтобы работал =)

Репутация: нет
Всего: нет

Репутация: нет
Всего: 2

Вроде не сильно мешает, но есть способ его убрать?

Также, может я не умею пользоваться Qt, но я не понял, почему при добавлении переменной в окно наблюдения, там появляется только ее имя, а когда нажимаю паузу, в графе значение пишет "<no such value>" - типа значение не задано. тип вообще не показывает.
Может я что-то не так делаю?

Репутация: нет
Всего: нет

Репутация: 24
Всего: 196

ColdSpirit, удали критор, что ты скачал. Затем скачай Qt SDK и установи его (выбрать надо mingw и Qt 4.8.0 для mingw, все остальное не обязательно).

Репутация: нет
Всего: 2

Добавлю, что на компе установлен "Microsoft Visual Studio 2008", и интегрирован с Qt официальной утилиткой "qt-vs-addin-1.1.10.exe" - тоесть со студии можно запустить визуальный редактор форм, загружать проекты Qt и т.п. Я думаю что на сам Qt он не влияет.

Репутация: 48
Всего: 135

ColdSpirit, тебе нужно отлаживаться в студии или в креаторе ?

Добавлено через 1 минуту и 44 секунды
если второе, то сделай как сказал bsa - скачай Qt, собранное minGW, а не

Женщины отличаются от программистов тем, что у них чары состоят из стрингов

Репутация: нет
Всего: 2

Репутация: 48
Всего: 135

ColdSpirit, у тебя сама библиотека Qt собрана студией. Скачай Qt, собранное MinGW, установи и в креаторе выбери профиль Qt с путём, в который установил библиотеку.

это оставь. должно работать

Добавлено через 6 минут и 1 секунду
Кажется догадываюсь. Ты при установке выбрал тип установки Default, а нужно было выбрать Custom, а затем в компонентах снять галочку
"Desktop Qt 4.8.0 - MSVC 2008" и поставить "Desktop Qt 4.8.0 - MinGW"

Женщины отличаются от программистов тем, что у них чары состоят из стрингов

5e609510287da203424761.jpg

Хотел отлаживать код по исходному коду, как в Visual Studio, но в Qt Creator отладка идёт автоматически по дизассемблированному коду, в настройках нужной опции не нашёл.

Нужно собрать код с отладочной информацией. Для gcc ключ -g в опциях компилятора.
На сколько я помню, в pro файле нужно задать:
BUILD_FLAG=debug
Тогда qmake включит отладочную информацию при сборке. Могу ошибаться, давно не использовал Qt и qmake.

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

FreshMeatInIT

Ну просто прописывание в pro файле BUILD_FLAG=debug
не помогло. А где можно найти опции компилятора gcc?

FreshMeatInIT

res2001, эта запись тоже не сработала, вот как выглядит .pro файл
А вот что получается, когда я пытаюсь изменить опции компилятора:
А вот что получается, когда я пытаюсь изменить опции компилятора:

Что вы хотите этим показать? Опции компилятора нигде не сохраняются. Бесполезно вот так вот запускать компилятор - после завершения работы все ранее указанные опции будут успешно забыты. У каждого вызова компилятора свой собственный набор опций, указанный при текущем запуске компилятора.

После правки pro файла нужно пересобрать проект (очистить и собрать все заново).
Посмотрите окно вывода компилятора, там могут отображаться команды запускаемые qmake для сборки проекта, в т.ч. и запуск gcc (или g++) и там можно увидеть полную командную строку с которой запускается компилятор.
После того как вы добавили CONFIG+=debug в параметрах компилятора должна появиться опция -g и еще видимо что-нибудь.
Все эти параметры в pro файле типа CONFIG и прочего в конце концов преобразуются в разные наборы опций компилятора и линковщика.

pro файл используется в системе сборки qmake, она создавалась для сборки Qt проектов, но может использоваться и без Qt. Подобных систем сборки много. qtcreator поддерживает еще работу с cmake системой сборки, достаточно популярная сейчас. Наиболее часто используемая в разных проектах (а так же древняя, тормознутая и не слишком удобная) это make и ее makefile.
Все системы сборки предназначены только для того что бы в итоге запустить компилятор, а затем линковщик с нужным набором опций. На самом деле они много чего другого могут запускать, но это вам сейчас не важно.

Читайте также: