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?
Tools-> Options-> Environment
General
debajo **System** Group
hay una Terminal
opción ./usr/bin/xterm -e
. Reemplácelo con /usr/bin/xterm -e sudo
o /usr/bin/gnome-terminal -x sudo
.Apply
y OK
Botones .Projects
, seleccione Run
Opción. En Run
Cuadro de grupo, seleccione Run in Terminal
.Recuerde: la sudo
opción debe estar allí
Editar /etc/sudoers
usandosudo visudo
La próxima vez que ejecute el programa, se invocará en un nuevo xterm
o gnome-terminal
con permiso de superusuario y le pedirá la contraseña de root .
Lo resolví iniciando Qt Creator como root.
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.
fuente
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(); }
fuente
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:
Aquí, está alojando el servidor con el puerto 2345. También puede verificar si su aplicación realmente se está ejecutando con UID 0.
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.
fuente
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
fuente