c – KDevelop调试警告:无法设置控制终端:不允许操作

前段时间我将我的个人操作系统改为 linux,将我的开发环境改为KDevelop.

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

每次我点击“调试按钮”时,应用程序都会从​​控制台消息开始
警告:GDB:设置控制终端失败:不允许操作,调试功能不可用.

任何想法欢迎.

(如果您需要其他信息,请不要犹豫)

我也遇到过这个问题,但是我在KDevelop中使用了gdb,这个问题还没有让我感到困扰.这是我尝试修复它的日志:

通过GDB 7.3.1源代码重点显示,当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实际上是另一个进程的控制权(这似乎不太可能),我认为假设GDB不是会话领导者是合理的.很公平,它毕竟是由KDevelop推出的!

所以:我尝试不在外部终端启动GDB会话,它可以工作.问题缩小了.

最初,外部终端线设置为konsole –noclose –workdir%workdir -e%exe.将此更改为终结符-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组的一部分,所有相关文件都是可读写的.

浏览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以使其正常工作(或者找到实际上导致它首先停止工作的原因……),所以我现在建议的最好的就是不要使用用于调试目的的外部终端.

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

相关文章
相关标签/搜索