Vor einiger Zeit habe ich mein persönliches Betriebssystem in Linux und meine Entwicklungsumgebung in KDevelop geändert.
Das Debuggen von C ++ - Projekten funktioniert jedoch immer noch nicht so, wie es sollte. Meine KDevelop-Version ist 4.2.2 (Ich habe es über die Paketverwaltung installiert)
Jedes Mal, wenn ich die "Debug-Taste" drücke, beginnt die Anwendung mit der Konsolenmeldung
warning: GDB: Failed to set controlling terminal: Operation not permitted
und Debugging-Funktionalität ist nicht verfügbar.
Irgendwelche Ideen willkommen.
(Wenn Sie weitere Informationen benötigen, zögern Sie nicht zu fragen)
Ich hatte dieses Problem auch, aber ich benutze gdb in KDevelop nur spärlich, was mich noch nicht gestört hat. Hier ist mein Protokoll zu versuchen, es zu beheben:
Wenn Sie den GDB 7.3.1-Quellcode überfliegen, wird angezeigt, dass diese Nachricht gedruckt wird, wenn GDB versucht, seine Master-TTY auf ein neu erstelltes Pseudo-Tty zu setzen (siehe gdb / inflow.c, Zeilen 683-740). Insbesondere ein Aufruf von ioctl mit der Anforderung TIOCSCTTY schlägt mit einem Berechtigungsfehler fehl.
Vor diesem Hintergrund habe ich mir den Quellcode des Linux-Kernels angeschaut, um zu sehen, was zu einem Fehler führen könnte. Ein wenig Suche zeigt, dass es schließlich zu einem Aufruf von tiocsctty () degenerieren wird. Der Kommentar von tiocsctty, der hier wichtig ist:
%Vor%Da der einzige andere Grund, warum es mit EPERM scheitern kann, ist, wenn das von GDB erzeugte tty eigentlich ein kontrollierendes tty für einen anderen -Prozess ist (was höchst unwahrscheinlich erscheint), hielt ich es für vernünftig, GDB anzunehmen ist kein Sitzungsleiter. Fair genug, es wird schließlich von KDevelop gestartet!
Also: Ich habe nicht versucht, die GDB-Sitzung in einem externen Terminal zu starten, und es funktioniert. Problem eingegrenzt.
Ursprünglich wurde die externe Terminalzeile auf konsole --noclose --workdir %workdir -e %exe
gesetzt. Das Ändern zu terminator -e %exe
machte einen kleinen Unterschied: KDevelop warnte mich davor
Ich habe meine Berechtigungen überprüft. Mein Benutzer war Teil der TTY-Gruppe und alle relevanten Dateien waren lesbar und schreibbar.
Wenn Sie durch den KDevelop-Quellcode tippen, wird angezeigt, wie KDevelop das Terminal tatsächlich erstellt. Es führt das Shell-Skript
aus %Vor%und richtet dann GDB ein, um das Terminalgerät zu verwenden, das es aus FIFO_PATH liest. (Mein Name ist übrigens nicht der, den KDevelop verwendet.) Das Problem (so gut ich das beurteilen kann) ist, dass gdb nicht als Kind des Shell-Skripts gestartet wird und daher nicht als Haupt-tty verwendet werden kann.
Ich habe keine Lust, KDevelop zu patchen, damit es bis jetzt richtig funktioniert (oder zu finden, was dazu geführt hat, dass es überhaupt nicht mehr funktioniert ...), also das Beste, was ich im Moment vorschlagen kann, ist Verwenden Sie einfach kein externes Terminal für Debugging-Zwecke.
Viel Glück! Ich werde aktualisieren, wenn ich etwas nützliches finde.
Falls Sie den Fehler haben:
"Kann keine konsole tty / pty empfangen. Überprüfen Sie, ob konsole tatsächlich eine ist Terminal und akzeptiert diese Argumente "
AUSFÜHREN & gt; KONFIGURIEREN LAUCHERS & gt; (Siehe Bild unten. Mein Projektname war "Schleifen")
Was für mich funktionierte war das Kontrollkästchen "Use External Terminal" zu deaktivieren. Gefunden in der "Compiled Binaries" Registerkarte.