Depurar la aplicación Qt en ubuntu con permiso de root usando qt creator

10

Es posible ejecutar mi aplicación con privilegios de root usando sudo, de esta manera:

sudo ./MyApp

¿Es posible depurar mi aplicación Qt usando privilegios de raíz usando QtCreator? ¿Cómo puedo hacer esto en un sistema Ubuntu?

Arun Kumar KS
fuente

Respuestas:

14
  1. Ir Tools-> Options-> Environment
  2. En la pestañaGeneral debajo **System** Grouphay una Terminalopción .
  3. El valor predeterminado se establece en /usr/bin/xterm -e. Reemplácelo con /usr/bin/xterm -e sudoo /usr/bin/gnome-terminal -x sudo.
  4. Presione Applyy OK Botones .
  5. En Selector de modo, haga clic en Projects, seleccione RunOpción. En RunCuadro de grupo, seleccione Run in Terminal.

Recuerde: la sudoopción debe estar allí

Editar /etc/sudoers usandosudo visudo

La próxima vez que ejecute el programa, se invocará en un nuevo xtermo gnome-terminal con permiso de superusuario y le pedirá la contraseña de root .

Jithin Mohan
fuente
2
Esta es la solución correcta
Ray
2
¿Qué deberíamos agregar en / etc / sudoers?
Necktwi
44
No funciona para mí, después de ingresar la contraseña de sudo La salida de la aplicación informa "La depuración ha terminado", ninguno de los interruptores realmente se rompe
Para el registro, "Selector de modo" es el panel de botones más a la izquierda con Bienvenido en la parte superior
Eric
1

Lo resolví iniciando Qt Creator como root.

sudo /usr/bin/qtcreator

Ahora obtendrá el permiso de root para la aplicación cuando compile y depure. Ahora es posible depurar mi aplicación con privilegios de root.

Arun Kumar KS
fuente
3
Eso es algo muy, muy estúpido que hacer. No estoy tratando de ser ofensivo. Estúpido en el sentido de que no es algo inteligente. Y estoy seguro de que la mayoría de la gente NUNCA haría esto.
iharob
1
No seas un usuario de Windows. No ejecutes todo como root.
Shahbaz
1
¡No hagas esto! Esto puede cambiar la propiedad de los archivos fuente que guarda bajo esta condición, más la propiedad de su .pro.user y otros archivos de configuración de Qt Creator. Cuando vuelves a correr como un usuario normal, te encontrarás con errores y tendrás que saltar algunos aros para restaurar todo. Aprendí esto de la manera más difícil ...
BuvinJ
1

Ejecutar eso como root es una idea horrible. En cambio, use la fuente y haga que qtcreator use sudo para iniciar gdb de esta manera. Requiere que ejecute qtcreator desde un tty y auth sudo antes de iniciar qtcreator, o configure su usuario para sudo sin contraseña (no recomendado). Codificaré una solución más completa más tarde.

Me llevó a 1-2 horas de código / depuración sin conocimiento previo de QT. La mayor parte de ese tiempo se pasó esperando que se completara la compilación

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
fuente
1

Ejecutaría el programa desde una terminal con un servidor GDB (como root) y luego me conectaría al servidor con gdb de QtCreator. Comenzaría gdbserver con algo como esto:

$ sudo gdbserver host:2345 ./MyApp

Aquí, está alojando el servidor con el puerto 2345. También puede verificar si su aplicación realmente se está ejecutando con UID 0.

$ sudo ps -u

Ahora, en Qt Creator, vaya a Debug -> Start Debugging -> Attach to Running Debug Server. Rellene el formulario ... lo más importante es el puerto y la dirección del servidor. Elegí 127.0.0.1 y 2345. Puede seleccionar break en main para romper al comienzo del programa. El servidor GDB no inicia el programa hasta que se conecta.

benzeno
fuente
0

Se recomendaron las siguientes acciones en el foro de soporte de Qt:

En Qt Creator, agregue un dispositivo Linux remoto en Opciones -> Dispositivos. Establezca su dirección como localhost y el usuario como root. Cree un par de claves de autenticación y pegue la clave pública en /root/.ssh/authorized_keys. Luego, clone el kit de escritorio en Opciones -> Kits y configure el dispositivo para el nuevo kit en el dispositivo que creó en el paso anterior.

Ahora, cuando comience a depurar, Qt Creator debería conectarse automáticamente a través de ssh a localhost como root, iniciar gdbserver y realizar la depuración.

Funciona para ejecutarse sin depurar también.

Quizás debería configurar la instalación de su programa en un host remoto, pero esa es una historia diferente y se hace de manera diferente para Qmake y QBS.

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

Alexandr Zarubkin
fuente