c++ - Advertencia de depuración de KDevelop: no se pudo configurar el terminal de control: operación no permitida
debugging gdb (2)
Hace un tiempo cambié mi sistema operativo personal a linux y mi entorno de desarrollo a KDevelop.
Sin embargo, la depuración de proyectos de C ++ todavía no está funcionando como debería. Mi versión de KDevelop es 4.2.2 (la instalé a través de la gestión de paquetes)
Cada vez que pulso el "botón de depuración", la aplicación comienza con la warning: GDB: Failed to set controlling terminal: Operation not permitted
mensaje de la consola warning: GDB: Failed to set controlling terminal: Operation not permitted
y la funcionalidad de depuración no está disponible.
Cualquier idea bienvenida
(Si necesita información adicional, no dude en preguntar)
También tuve este problema, pero utilicé gdb en KDevelop lo suficientemente poco como para no haberme molestado todavía. Aquí está mi registro de tratar de solucionarlo:
La expansión a través del código fuente de GDB 7.3.1 revela que este mensaje se imprime cuando GDB intenta establecer su TTY maestro a un pseudo-tty recién creado (ver gdb / inflow.c, líneas 683-740). En particular, una llamada a ioctl con solicitud TIOCSCTTY falla con un error de permisos.
Con esto en mente, eché un vistazo al código fuente del kernel de Linux para ver qué podría causar un error. Un poco de búsqueda muestra que eventualmente degenerará en una llamada a tiocsctty (). El comentario de tiocsctty que es importante aquí:
/*
* The process must be a session leader and
* not have a controlling tty already.
*/
Dado que la única otra razón por la que puede fallar con EPERM es que si el tty que crea el GDB es en realidad un tty controlador para otro proceso (lo que parece muy improbable), pensé que era razonable suponer que GDB no es un líder de sesión. ¡Bastante justo, es lanzado por KDevelop después de todo!
Entonces: Intenté no iniciar la sesión de GDB en un terminal externo, y funciona. El problema se redujo
Originalmente, la línea de terminal externa se configuró en konsole --noclose --workdir %workdir -e %exe
. Cambiar esto a terminator -e %exe
hizo una pequeña diferencia: KDevelop me advirtió que
GDB cannot use the tty* or pty* devices.
Check the settings on /dev/tty* and /dev/pty*
As root you may need to "chmod ug+rw" tty* and pty* devices and/or add the user to the tty group using "usermod -G tty username".
Revisé mis permisos; mi usuario era parte del grupo tty y todos los archivos relevantes eran legibles y escribibles.
La expansión a través del código fuente de KDevelop revela cómo KDevelop realmente configura el terminal. Ejecuta el script de shell
tty > FIFO_PATH ; trap "" INT QUIT TSTP ; exec<&-; exec>&-; while :; do sleep 3600;done
y luego configura GDB para usar el dispositivo terminal que lee de FIFO_PATH. (Mi nombre, dicho sea de paso, no es el que usa KDevelop). El problema (lo mejor que puedo decir) es que gdb no se inicia como un elemento secundario del script de shell y, por lo tanto, no puede usarlo como su tty principal.
No tengo ganas de parchar KDevelop para hacer que esto funcione correctamente hasta el momento (o encontrar lo que realmente causó que esto deje de funcionar, en primer lugar ...), así que lo mejor que puedo sugerir en este momento es simplemente no usar un terminal externo para fines de depuración.
¡Buena suerte! Actualizaré si encuentro algo útil.
En caso de que tengas el error:
"No se puede recibir konsole tty / pty. Comprobar que konsole es realmente una terminal y que acepta estos argumentos"
EJECUTAR> CONFIGURAR LATITUDES> (Ver imagen a continuación. El nombre de mi proyecto era "bucles")
Lo que funcionó para mí fue desmarcar la casilla de verificación "Usar terminal externo". Encontré el en la pestaña "Binarios Compilados".