Qt Creator,ptrace:不允许操作.什么是永久解决方案?

Ind*_*dra 53 c++ qt linux-kernel linux-mint qt5

C++在Qt创建器中调试代码时,我收到以下错误

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
Run Code Online (Sandbox Code Playgroud)

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

  • 临时解决方案(无法重启):

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

但是每次启动PC使用Qt时,很难在终端中运行相同的代码.

What is the permanent solution for this?
Run Code Online (Sandbox Code Playgroud)

xor*_*007 62

如果运行Ubuntu,

启用所需ptrace内核设置(由qtcreator提示)的推荐方法是编辑/etc/sysctl.d/10-ptrace.conf

sudo vim  /etc/sysctl.d/10-ptrace.conf
Run Code Online (Sandbox Code Playgroud)

然后改变

kernel.yama.ptrace_scope = 1
Run Code Online (Sandbox Code Playgroud)

kernel.yama.ptrace_scope = 0
Run Code Online (Sandbox Code Playgroud)

保存,

然后申请:

$ sudo sysctl --system -a -p|grep yama
kernel.yama.ptrace_scope = 0
Run Code Online (Sandbox Code Playgroud)

man sysctl
Run Code Online (Sandbox Code Playgroud)

了解更多信息.

  • 这是最正确的答案!虽然接受的答案会起作用,但这是一个黑客攻击,并且在sysctl配置中更改此设置是一个更好的选择. (4认同)

Ind*_*dra 24

我得到了答案.

  • 转到/etc具有root权限的位置.

  • 找到该文件rc.local.

  • 在像gedit这样的文本编辑器中打开它,并在那里添加以下代码
  • echo 0 | tee /proc/sys/kernel/yama/ptrace_scope

重启你的电脑,你可以看到调试器工作正常.

  • @Life:***不建议***.永远.这是一个安全问题,更不用说任何使用Qt> = 5.3的Qt应用程序都会很高兴`abort()`如果用EUID 0运行它们(参见[here](https://codereview.qt-project.org/#/) C/74531 /)).-1主要答案,因为正确的解决方案是修改`/ etc/sysctl.conf`或`/ etc/sysctl.d /`下的正确文件,而*不*在init序列中添加随机内容. (10认同)
  • @Life:这可能是一种解决方法.但缺点是你赋予你的`qtcreator` root权限.如果`qtcreator`中存在错误或者黑客发现了漏洞,他/她就拥有对整个计算机的访问权限.人们在谈到"sudo"时应该更加小心. (3认同)
  • `sudo~/Qt/Tools/QtCreator/bin/qtcreator`,无需修改提到的文件. (2认同)

Ehs*_*adr 5

我在以下链接上的ubuntu上找到了适合我的答案,功劳归于dstzcxr

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

只需取消选中(或选中-运行-取消选中是否由于某种原因未选中)“项目”(在左侧栏中)中的“在终端中运行”框-“运行”选项卡-“运行”部分。