Depure o aplicativo Qt no ubuntu com permissão de root usando o qt creator

10

É 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?

Arun Kumar KS
fonte

Respostas:

14
  1. Vamos para Tools-> Options-> Environment
  2. Na guiaGeneral abaixo, **System** Grouphá uma Terminalopção .
  3. O valor padrão está definido como /usr/bin/xterm -e. Substitua por /usr/bin/xterm -e sudoou /usr/bin/gnome-terminal -x sudo.
  4. Pressione Applye OK botões .
  5. Em Seletor de modo, clique em Projects, selecione RunOpção. Em RunCaixa de grupo, selecione Run in Terminal.

Lembre-se: a sudoopçã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 xtermou gnome-terminal com permissão de superusuário e solicitará a senha root .

Jithin Mohan
fonte
2
Esta é a solução certa
Ray
2
o que devemos adicionar no / etc / sudoers?
Necktwi
4
Não funciona para mim, depois de entrar sudo senha do aplicativo relatórios saída "Depuração tenha terminado", ninguém de breakponts realmente breaks
Para o registro, "Mode Selector" é o painel de botões mais à esquerda com Welcome no topo
Eric
1

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.

Arun Kumar KS
fonte
3
É uma coisa muito, muito, muito estúpida de se fazer. Não estou tentando ser ofensivo. ESTÚPIDO no sentido de que não é uma coisa inteligente a se fazer. E tenho certeza de que a maioria das pessoas NUNCA faria isso.
Iharob 10/09/2015
1
Não seja um usuário do Windows. Não execute tudo como root.
Shahbaz
1
Não faça isso! Isso pode alterar a propriedade dos arquivos de origem que você salva sob essa condição, além da propriedade de seu .pro.user e outros arquivos de configuração do Qt Creator. Quando você volta a funcionar como um usuário comum, você se depara com erros e precisa passar por alguns obstáculos para restaurar tudo. Eu aprendi isso da maneira mais difícil ...
BuvinJ
1

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(); }

ppetraki
fonte
1

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.

benzeno
fonte
0

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.

https://forum.qt.io/post/185983

Alexandr Zarubkin
fonte