Отладка приложения Qt в Ubuntu с правами root с использованием Qt Creator

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

sudo ./MyApp

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

10
задан 8 January 2013 в 11:35

5 ответов

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

Помните: опция sudo должна присутствовать

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

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

0
ответ дан 8 January 2013 в 11:35

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

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

https://gist.github.com/ppetraki/a0080da047047ea184c6

--- 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

void GdbProcess::start(const QString &cmd, const QStringList &args) { - m_gdbProc.setCommand(cmd, Utils::QtcProcess::joinArgs(args)); + QStringList sudoArgs; + sudoArgs << cmd << args; + QString sudoCmd = QString::fromUtf8("/usr/bin/sudo"); + + m_gdbProc.setCommand(sudoCmd, Utils::QtcProcess::joinArgs(sudoArgs)); m_gdbProc.start(); }

0
ответ дан 8 January 2013 в 11:35

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

sudo /usr/bin/qtcreator

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

0
ответ дан 8 January 2013 в 11:35

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

$ sudo gdbserver host:2345 ./MyApp

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

$ sudo ps -u

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

0
ответ дан 8 January 2013 в 11:35

Следующие действия рекомендовались на спокойном форуме поддержки:

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

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

Это работает на выполнение, не отлаживая также.

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

https://forum.qt.io/post/185983

0
ответ дан 16 October 2019 в 10:10

Другие вопросы по тегам:

Похожие вопросы: