gpt4 book ai didi

c++ - KDevelop调试警告: Failed to set controlling terminal: Operation not permitted

转载 作者:可可西里 更新时间:2023-11-01 18:06:17 25 4
gpt4 key购买 nike

前段时间我把个人操作系统换成了linux,开发环境换成了KDevelop。

但是,调试 C++ 项目仍然无法正常工作。我的KDevelop版本是4.2.2(我是通过包管理安装的)

每次我点击“调试按钮”时,应用程序都会以控制台消息启动警告:GDB:无法设置控制终端:不允许操作并且调试功能不可用。

欢迎任何想法。

(如果您需要更多信息,请随时询问)

最佳答案

我也有这个问题,但我在 KDevelop 中很少使用 gdb,所以还没有困扰我。这是我尝试修复它的日志:

对 GDB 7.3.1 源代码进行 Grepping 后发现,当 GDB 尝试将其主 TTY 设置为新创建的伪 TTY 时会打印此消息(请参阅 gdb/inflow.c,第 683-740 行)。特别是,使用请求 TIOCSCTTY 调用 ioctl 失败并出现权限错误。

考虑到这一点,我查看了 Linux 内核源代码,看看是什么导致了失败。一些搜索表明它最终会退化为对 tiocsctty() 的调用。来自 tiocsctty 的评论在这里很重要:

/*
* The process must be a session leader and
* not have a controlling tty already.
*/

因为 EPERM 失败的唯一其他原因是如果 GDB 创建的 tty 实际上是 另一个 进程的控制 tty(这似乎不太可能),我认为假设 GDB 是合理的不是 session 负责人。很公平,毕竟它是由 KDevelop 推出的!

所以:我尝试在外部终端中启动 GDB session ,但它有效。问题缩小了。

最初,外部终端线设置为 konsole --noclose --workdir %workdir -e %exe。将其更改为 terminator -e %exe 会略有不同:KDevelop 警告我

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".

我检查了我的权限;我的用户是 tty 组的一部分,所有相关文件都是可读可写的。

通过 Grepping KDevelop 源代码揭示了 KDevelop 实际上是如何设置终端的。它运行 shell 脚本

tty > FIFO_PATH ; trap "" INT QUIT TSTP ; exec<&-; exec>&-; while :; do sleep 3600;done

然后设置 GDB 以使用它从 FIFO_PATH 读取的终端设备。 (顺便说一下,我的名字不是 KDevelop 使用的名字。)问题(据我所知)是 gdb 不是作为 shell 脚本的子项启动的,因此不能将它用作它的主要 tty。

到目前为止,我还没有准备好修补 KDevelop 以使其正常工作(或者找到真正导致它停止工作的原因......),所以目前我能建议的最好的是根本不使用外部终端进行调试。

祝你好运!如果我发现任何有用的东西,我会更新。

关于c++ - KDevelop调试警告: Failed to set controlling terminal: Operation not permitted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com