Можно запустить мое приложение с правами root, используя sudo
это:
sudo ./MyApp
Можно ли отладить мое приложение Qt с помощью привилегированных пользователей с помощью QtCreator? Как я могу сделать это в системе Ubuntu?
Можно запустить мое приложение с правами root, используя sudo
это:
sudo ./MyApp
Можно ли отладить мое приложение 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 .
Я решил это, запустив Qt Creator от имени пользователя root.
sudo /usr/bin/qtcreator
Теперь он получит разрешение root для приложения, когда я скомпилирую и отладлю. Теперь возможно отладить мое приложение с привилегиями root.
Запуск этого как 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();
}
Я запускал программу из терминала с сервером 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 не запускает программу, пока вы не подключитесь.
На форуме поддержки Qt были рекомендованы следующие действия:
В Qt Creator добавьте удаленное устройство Linux в Параметры -> Устройства. Установите его адрес как localhost, а пользователя как root. Создайте пару ключей аутентификации и вставьте открытый ключ в /root/.ssh/authorized_keys
. Затем клонируйте Desktop kit в Options -> Kits и установите устройство для нового набора на устройство, которое вы создали на предыдущем шаге.
Теперь, когда вы начинаете отладку, Qt Creator должен автоматически подключиться через ssh к localhost от имени root, запустить gdbserver и выполнить отладку.
Это работает для запуска без отладки тоже.
Возможно, вам следует настроить установку вашей программы на удаленном хосте, но это другая история, и это делается по-разному для Qmake и QBS.