使用GDB设置inferior-tty时提示权限不允许的问题求助
GDB重定向终端报错“Failed to set controlling terminal: Operation not permitted”的解决方法
你用GDB调试时,通过set inferior-tty /dev/pts/22把被调试程序的IO重定向到另一个终端,结果目标终端弹出GDB: Failed to set controlling terminal: Operation not permitted,虽然IO看似过去了,但功能不正常。下面是几个实用的解决办法:
先检查终端权限
先确认你当前用户对/dev/pts/22有读写权限,跑这个命令查看:ls -l /dev/pts/22如果权限不够,直接修改权限:
sudo chmod 666 /dev/pts/22或者切换到这个终端所属的用户再操作。
确认终端路径没写错
在目标终端里执行tty命令,拿到准确的路径,确保GDB里输入的路径和这个完全一致,别打错字。换种方式重定向,不用
set inferior-tty
跳过set inferior-tty的设置,启动程序时直接手动重定向IO:run < /dev/pts/22 > /dev/pts/22 2>&1这种方式绕开了GDB尝试接管终端控制权的操作,能更稳定完成重定向,不会触发权限报错。
调整系统ptrace限制(Linux系统)
如果是系统的ptrace限制导致的问题,临时解除限制:sudo sysctl -w kernel.yama.ptrace_scope=0要永久生效的话,编辑
/etc/sysctl.d/10-ptrace.conf,把kernel.yama.ptrace_scope的值改成0,然后执行sudo sysctl -p或者重启系统。
原因说明
set inferior-tty会尝试让被调试进程接管目标终端的控制权限,但如果目标终端正被其他进程占用,或者你没有足够权限,就会触发这个错误。而手动重定向IO的方式不需要接管终端控制权,自然能避开这个问题。
内容的提问来源于stack exchange,提问作者freddie_ventura
相关产品推荐
相关产品推荐

