Ho anche avuto questo problema, ma io uso gdb in KDevelop abbastanza poco che non mi aveva ancora preso la briga. Ecco il mio log di provare a risolverlo:
Grepping tramite il GDB 7.3.1 il codice sorgente rivela che questo messaggio viene stampato quando GDB tenta di impostare il proprio TTY principale su uno pseudo-tty appena creato (vedere gdb/inflow. c, righe 683-740). In particolare, una chiamata a ioctl con richiesta TIOCSCTTY fallisce con un errore di autorizzazione.
Con questo in mente, ho dato un'occhiata al codice sorgente del kernel di Linux per vedere cosa potrebbe causare un errore. Un po 'di ricerca mostra che alla fine degenererà in una chiamata a tiocsctty(). Il commento da tiocsctty che è importante qui:
/*
* The process must be a session leader and
* not have a controlling tty already.
*/
Dal momento che l'unico altro motivo può riuscire con EPERM è se il tty che GDB crea è in realtà un terminale di controllo per un'altra processo (che sembra altamente improbabile), Ho pensato che fosse ragionevole supporre che GDB non fosse un leader di sessione. Dopo tutto, è stato lanciato da KDevelop!
Quindi: Ho provato non lanciare la sessione GDB in un terminale esterno, e funziona. Problema ristretto.
In origine, la linea di terminale esterna è stata impostata su konsole --noclose --workdir %workdir -e %exe
. La modifica di questa a terminator -e %exe
fatto una leggera differenza: KDevelop mi ha avvertito che
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".
Ho controllato il mio permessi; il mio utente faceva parte del gruppo tty e tutti i file rilevanti erano leggibili e scrivibili.
Grepping tramite il codice sorgente di KDevelop rivela come KDevelop imposta effettivamente il terminale. Esegue lo script shell
tty > FIFO_PATH ; trap "" INT QUIT TSTP ; exec<&-; exec>&-; while :; do sleep 3600;done
e quindi imposta GDB per utilizzare il dispositivo terminale legge da FIFO_PATH. (Il mio nome, a proposito, non è quello che usa KDevelop.) Il problema (come meglio posso dire) è che gdb non viene lanciato come figlio dello script di shell, e quindi non può usarlo come suo tty principale.
Non mi sento in grado di applicare patch a KDevelop per farlo funzionare correttamente (o trovare ciò che effettivamente ha causato questo smettere di funzionare in primo luogo ...), quindi il meglio che posso suggerire al momento è semplicemente non usare un terminale esterno per scopi di debug.
Buona fortuna! Aggiornerò se trovo qualcosa di utile.
soli * * nitpick Googling quell'avvertimento dà colpi 6k realtà. –
I googled tale avvertimento, ma non ero in grado di risolvere it- questo è il motivo per cui ho scritto questo post. – Mythli
Le persone usano ancora KDevelop? Non ho toccato che come 10 anni ... –