Можно запустить мое приложение с помощью root priviliges с помощью sudo, например:
sudo ./MyApp
Можно ли отладить мое приложение Qt с помощью root priviliges с помощью QtCreator? Как я могу сделать это в системе Ubuntu?
Помните: опция 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
--- 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.
Теперь в Qt Creator перейдите в Debug -> Start Debugging -> Attach to Running Debug Server. Заполните форму ... самым важным является адрес порта и сервера. Я выбрал 127.0.0.1 и 2345. Вы можете выбрать break на main, чтобы сломаться в начале программы. Сервер GDB не запускает программу, пока вы не подключитесь.