Qt Creator,ptrace:操作不允许。有什么永久解决方案吗?

57

在Qt Creator中调试C++代码时,我遇到了以下错误

ptrace: Operation not permitted.

Could not attach to the process. Make sure no other debugger traces this process.
Check the settings of
/proc/sys/kernel/yama/ptrace_scope
For more details, see /etc/sysctl.d/10-ptrace.conf

这里找到了一个临时解决方案:在QtProject中尝试调试时收到错误

  • 临时解决方案(不会在重启后生效):

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

但是每次启动电脑使用Qt时都需要在终端中运行相同的代码很麻烦。

What is the permanent solution for this?

4
你可以将它加入自启动(例如放在/etc/rc.local中)。 - Pavel Strakhov
只需移除sudo。/etc/rc.local会以超级用户权限执行。 - Pavel Strakhov
http://askubuntu.com/questions/311053/how-to-make-ip-forwarding-permanent - Ciro Santilli OurBigBook.com
3个回答

67
如果正在运行Ubuntu,
启用所需的ptrace内核设置(由qtcreator提示)的推荐方法是编辑/etc/sysctl.d/10-ptrace.conf。
推荐的启用所需 ptrace 内核设置的方法(由 qtcreator 暗示)是编辑 /etc/sysctl.d/10-ptrace.conf 文件。
sudo vim  /etc/sysctl.d/10-ptrace.conf

然后改变

kernel.yama.ptrace_scope = 1

kernel.yama.ptrace_scope = 0

保存,

然后应用:

$ sudo sysctl --system -a -p|grep yama
kernel.yama.ptrace_scope = 0

运行

man sysctl

获取更多信息。


4
这是最正确的答案!虽然被接受的答案可行,但它是一个hack,而在sysctl配置中更改此设置是一个更好的选择。 - stonecrusher
这个并不能解决我的问题,而楼主提供的一次性解决方案是唯一对我有效的方法,但可惜只能持续到下一次重启之前...... - dhein

24

我已经得到答案。

  • 以root权限进入位置为/etc的文件夹。

  • 查找名为rc.local的文件。

  • 在文本编辑器(如gedit)中打开该文件,并添加以下代码:
  • echo 0 | tee /proc/sys/kernel/yama/ptrace_scope

重启计算机,你将看到调试器完美地运行。


2
请执行以下命令:sudo ~/Qt/Tools/QtCreator/bin/qtcreator,无需修改所提到的文件。 - Life
1
太棒了。我的问题也解决了。干得好。 - Beakie
1
你可以在终端中执行以下命令,而不是重新启动:echo 0 | tee /proc/sys/kernel/yama/ptrace_scope - Melroy van den Berg
3
@Life:这可能是一个权宜之计。但劣势在于你赋予 qtcreator root 权限。如果 qtcreator 存在漏洞或黑客找到了攻击点,他/她将能够访问你机器的所有内容。人们在使用 sudo 时应更加小心谨慎。 - Willem Van Onsem
11
@Life: 绝不建议那样做。这是一个安全问题,更何况任何使用Qt >= 5.3的Qt应用程序,如果以EUID 0运行它们,都会愉快地中止(请参见此处)。-1主要答案,因为适当的解决方案是修改/etc/sysctl.conf/etc/sysctl.d/下的正确文件,而不是在初始化序列中添加随机内容。 - peppe
@大家 真的非常有帮助的建议。谢谢! - Life

5

我在下面的链接中找到了适用于我的Ubuntu的答案,感谢dstzcxr

https://askubuntu.com/a/501271/395583

在“项目”(左侧栏)的“运行”选项卡中,取消勾选“在终端中运行”的复选框(如果未勾选则勾选-运行-再取消勾选),即可实现。请保留HTML标签。

我唯一感受到的变化是终端应用程序现在甚至无法启动了。 - dhein
您可以在“问题”旁边的“应用程序输出”中找到程序的输出。如果这不是您要寻找的内容,请详细说明您的问题。 - eSadr
我的问题和原帖作者一样,它只是让我的程序无法启动了。 - dhein
有没有一种方法可以在Android操作系统上修复它? 我想使用GDB调试应用程序,但它给了我“ptrace:操作不允许”的错误。 - user3763113

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接