Можно запустить мое приложение с привилегиями пользователя root, используя sudo
, например:
sudo ./MyApp
Можно ли отладить мое приложение Qt с помощью привилегий пользователя root с помощью QtCreator? Как я могу сделать это в системе Ubuntu?
Tools-> Options-> Environment
General
в разделе **System** Group
есть опция Terminal
[ 1130]. /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 .
Запускать это как root - ужасная идея. Вместо этого используйте исходный код и заставьте qtcreator использовать sudo для запуска gdb следующим образом. Требуется, чтобы вы запустили qtcreator из tty и auth sudo перед запуском qtcreator, или сконфигурировали своего пользователя для sudo без пароля (не рекомендуется). Я напишу более полное решение позже.
Мне потребовалось 1-2 часа на кодирование / отладку без предварительного знания QT. Большая часть этого времени была потрачена на ожидание завершения сборки
https://gist.github.com/ppetraki/a0080da047047ea184c6
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();
}
--- 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
Я решил это, запустив Qt Creator от имени root.
sudo /usr/bin/qtcreator
Теперь он получит разрешение root для приложения, когда я скомпилирую и отладлю. Теперь возможно отладить мое приложение с привилегиями root.
Я запускал программу из терминала с сервером 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-сервер не запускает программу, пока вы не подключитесь.
Следующие действия рекомендовались на спокойном форуме поддержки:
В спокойном Создателе, добавьте удаленное устройство Linux в Опциях-> Устройства. Установите его адрес как localhost и пользователь как корень. Создайте пару аутентификационных ключей и вставьте открытый ключ к /root/.ssh/authorized_keys
. Затем клонируйте рабочий стол набор в Опциях-> Наборы и набор устройство для нового набора к устройству, которое Вы создали на предыдущем шаге.
Теперь, когда Вы начинаете отлаживать, спокойный Создатель должен автоматически соединиться по ssh с localhost как корень, запустить gdbserver и выполнить отладку.
Это работает на выполнение, не отлаживая также.
, Возможно, необходимо настроить установку программы на удаленном хосте, но это - другая история, и это сделано по-другому для Qmake и QBS.