Eu resolvi isso iniciando o Qt Creator como root.
sudo /usr/bin/qtcreator
Agora ele irá obter a permissão de root para o aplicativo quando eu compilar e depurar. Agora é possível depurar meu aplicativo com privilégios de root.
É possível executar meu aplicativo com privilégios de root usando sudo
, assim:
sudo ./MyApp
É possível depurar meu aplicativo Qt usando privilégios de root usando o QtCreator? Como posso fazer isso em um sistema Ubuntu?
Eu resolvi isso iniciando o Qt Creator como root.
sudo /usr/bin/qtcreator
Agora ele irá obter a permissão de root para o aplicativo quando eu compilar e depurar. Agora é possível depurar meu aplicativo com privilégios de root.
Tools-> Options-> Environment
General
, em **System** Group
, há uma Terminal
opção . /usr/bin/xterm -e
. Substitua por /usr/bin/xterm -e sudo
ou /usr/bin/gnome-terminal -x sudo
. Apply
e OK
. Projects
, selecione Run
Opção. Em Run
Group Box , selecione Run in Terminal
. Lembre-se: a opção sudo
deve estar lá
Editar /etc/sudoers
usando sudo visudo
Na próxima vez que você executar o programa, ele será invocado em um novo xterm
ou gnome-terminal
com permissão de superusuário e solicitará a senha de root .
Executar isso como root é uma ideia horrível. Em vez disso, use a origem e faça qtcreator usar o sudo para iniciar o gdb dessa maneira. Exige que você execute qtcreator a partir de um tty e auth sudo antes de iniciar o qtcreator, ou configure seu usuário para sudo sem senha (não recomendado). Codificarei uma solução mais completa depois.
Levei-me a 1-2 horas de código / depuração sem conhecimento prévio de QT. A maior parte desse tempo foi gasta esperando a compilação completar
--- 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 & amp; cmd, const QStringList & amp; 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 (); }
Eu rodaria o programa de um terminal com um servidor GDB (como root) e então conectaria ao servidor com o gdb do QtCreator. Você iniciaria gdbserver com algo assim:
$ sudo gdbserver host:2345 ./MyApp
Aqui, você está hospedando o servidor com a porta 2345. Você também pode verificar se seu aplicativo está sendo executado com o UID 0.
$ sudo ps -u
Agora, no Qt Creator, vá em Debug - > Iniciar a depuração - > Anexar ao servidor de depuração em execução. Preencha o formulário ... o mais importante é o endereço da porta e do servidor. Eu escolhi 127.0.0.1 e 2345. Você pode selecionar break no main para quebrar no início do programa. O servidor GDB não inicia o programa até você se conectar.
Tags sudo root qt debug qt-creator