É possível executar meu aplicativo com privilégios de root usando sudo
, desta forma:
sudo ./MyApp
É possível depurar meu aplicativo Qt usando privilégios de root usando QtCreator? Como posso fazer isso em um sistema Ubuntu?
É possível executar meu aplicativo com privilégios de root usando sudo
, desta forma:
sudo ./MyApp
É possível depurar meu aplicativo Qt usando privilégios de root usando QtCreator? Como posso fazer isso em um sistema Ubuntu?
Respostas:
Tools-> Options-> Environment
General
abaixo, **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
botões .Projects
, selecione Run
Opção. Em Run
Caixa de grupo, selecione Run in Terminal
.Lembre-se: a sudo
opção deve estar lá
Edite /etc/sudoers
usandosudo visudo
Na próxima vez em que você executar o programa, ele será chamado em uma nova xterm
ou gnome-terminal
com permissão de superusuário e solicitará a senha root .
Eu o resolvi iniciando o Qt Creator como root.
sudo /usr/bin/qtcreator
Agora ele obterá a permissão root para o aplicativo quando eu compilar e depurar. Agora é possível depurar meu aplicativo com privilégios de root.
Executar isso como raiz é uma ideia horrível. Em vez disso, use a fonte e faça com que o qtcreator use o sudo para iniciar o gdb assim. Requer que você execute o qtcreator a partir de um tty e auth sudo antes de iniciar o qtcreator ou configure seu usuário para o sudo sem senha (não recomendado). Codificarei uma solução mais completa mais tarde.
Levei de 1 a 2 horas de código / depuração sem conhecimento prévio de QT. Passou a maior parte desse tempo aguardando a conclusão da compilação
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();
}
Eu rodaria o programa a partir de um terminal com um servidor GDB (como root) e depois me conectaria ao servidor com gdb do QtCreator. Você iniciaria o gdbserver com algo assim:
$ sudo gdbserver host:2345 ./MyApp
Aqui, você está hospedando o servidor com porta 2345. Você também pode verificar se seu aplicativo está realmente executando com o UID 0.
$ sudo ps -u
Agora, no Qt Creator, vá em Debug -> Start Debugging -> Attach to Running Debug Server. 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 break no início do programa. O servidor GDB não inicia o programa até você se conectar.
As seguintes ações foram recomendadas no fórum de suporte do Qt:
No Qt Creator, adicione um dispositivo Linux remoto em Opções -> Dispositivos. Defina seu endereço como localhost e usuário como raiz. Crie um par de chaves de autenticação e cole a chave pública em /root/.ssh/authorized_keys
. Em seguida, clone o kit da área de trabalho em Opções -> Kits e defina o dispositivo para o novo kit no dispositivo que você criou na etapa anterior.
Agora, quando você iniciar a depuração, o Qt Creator deverá conectar-se automaticamente através do ssh ao localhost como root, iniciar o gdbserver e executar a depuração.
Também funciona para execução sem depuração.
Talvez você deva configurar a instalação do seu programa no host remoto, mas isso é uma história diferente e é feita de maneira diferente para o Qmake e o QBS.