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

Можно запустить мое приложение с помощью root priviliges с помощью sudo, например:

sudo ./MyApp

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

1
задан 8 January 2013 в 13:35

3 ответа

Перейти к 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. В поле Run Group Box выберите Run in Terminal.

Помните: опция sudo должна быть там

Изменить /etc/sudoers с помощью sudo visudo

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

10
ответ дан 25 May 2018 в 02:39
  • 1
    Это правильное решение – Ray 11 August 2016 в 23:22
  • 2
    что мы должны добавить в / etc / sudoers? – neckTwi 16 November 2016 в 14:09
  • 3
    Не работает для меня, после ввода пароля sudo. Отчеты о выводах приложений и «Отладка завершена», ни один из breakponts действительно не прерывается – Yuri S. Cherkasov 21 January 2017 в 13:29

Выполнение этого как 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(); }

1
ответ дан 25 May 2018 в 02:39

Я запустил программу с терминала с сервером 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 не запускает программу, пока вы не подключитесь.

0
ответ дан 25 May 2018 в 02:39

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

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