Qt creator не работает отладка linux
удаленная отладка 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?
- Перейти к Tools-> Options-> Environment
- В закладке General под **System** Group есть Terminal вариант .
- По умолчанию установлено значение /usr/bin/xterm -e . Замените его на /usr/bin/xterm -e sudo или /usr/bin/gnome-terminal -x sudo .
- Нажмите Apply и OK кнопки .
- Под селектором режимов нажмите 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
Репутация: нет
Всего: 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"
Нужно собрать код с отладочной информацией. Для gcc ключ -g в опциях компилятора.
На сколько я помню, в pro файле нужно задать:
BUILD_FLAG=debug
Тогда qmake включит отладочную информацию при сборке. Могу ошибаться, давно не использовал Qt и qmake.
Если показанная точка - это не ваш код, а находится, например, внутри библиотеки, которую использует ваш код, то нужно эту библиотеку собрать с отладочной информацией. Но в этом случае, чаще всего ошибка все равно в вашем коде, так что возможно это и не потребуется.
не помогло. А где можно найти опции компилятора gcc?
А вот что получается, когда я пытаюсь изменить опции компилятора:
А вот что получается, когда я пытаюсь изменить опции компилятора:
Что вы хотите этим показать? Опции компилятора нигде не сохраняются. Бесполезно вот так вот запускать компилятор - после завершения работы все ранее указанные опции будут успешно забыты. У каждого вызова компилятора свой собственный набор опций, указанный при текущем запуске компилятора.
После правки pro файла нужно пересобрать проект (очистить и собрать все заново).
Посмотрите окно вывода компилятора, там могут отображаться команды запускаемые qmake для сборки проекта, в т.ч. и запуск gcc (или g++) и там можно увидеть полную командную строку с которой запускается компилятор.
После того как вы добавили CONFIG+=debug в параметрах компилятора должна появиться опция -g и еще видимо что-нибудь.
Все эти параметры в pro файле типа CONFIG и прочего в конце концов преобразуются в разные наборы опций компилятора и линковщика.
pro файл используется в системе сборки qmake, она создавалась для сборки Qt проектов, но может использоваться и без Qt. Подобных систем сборки много. qtcreator поддерживает еще работу с cmake системой сборки, достаточно популярная сейчас. Наиболее часто используемая в разных проектах (а так же древняя, тормознутая и не слишком удобная) это make и ее makefile.
Все системы сборки предназначены только для того что бы в итоге запустить компилятор, а затем линковщик с нужным набором опций. На самом деле они много чего другого могут запускать, но это вам сейчас не важно.
Читайте также: