在CLion中以root身份运行C或C++程序

13
我正在尝试使用CLion 2022.3.2作为超级用户运行一个用C/C++编写的程序。这里有人知道如何以超级用户身份运行它吗?我正在使用CMake。

看看这个能否帮到您:https://intellij-support.jetbrains.com/hc/en-us/community/posts/207381135-Run-debug-program-as-root-or-start-CLion-as-root- - Rick
6个回答

4

我通过在本地机器上进行远程调试解决了这个问题。我使用root权限运行gdbserver,并从CLion连接到它。

要启动gdbserver,请使用sudo gdbserver:port myapp命令,并使用端口配置远程GDB调试。


2

1
如果您想以sudo/administrator身份运行调试器,我曾经遇到过同样的问题。在Linux上,您可以以sudo方式打开CLion,gdb将不会有根权限问题来运行可执行文件:
sudo ./clion.sh

我猜您可以在Windows中右键单击并选择“以管理员身份运行”来获得相同的结果。
有一个功能请求提交到JetBrains,要求以root权限运行调试器,需要更多的投票支持。

当你以root身份运行时,Clion在启动之前崩溃了,这个不起作用。 - Allison
在Windows或Linux上?无论哪种方式都不会让我感到惊讶。我在写完那篇文章后很快就放弃了Clion。我喜欢Android Studio,但由于我遇到的问题,无法为Clion付费。 - MrSnrub
Linux。看起来是一个Ubuntu的bug,从他们的论坛上可以看出来。 - Allison
我执行 sudo -i 然后运行 clion.sh,从来没有遇到过崩溃的问题。使用的是 Ubuntu 16.04 / 18.04。 - gerardw

1
一个解决方法是:
https://www.jetbrains.com/help/clion/attaching-to-local-process.html#prereq-ubuntu
如果您在Ubuntu上使用CLion(或可能在其他Linux发行版上),在第一次尝试附加到本地进程时,您可能会收到ptrace:Operation not permitted错误消息。要禁用它并启用附加到本地进程功能,请执行以下操作:
为了暂时禁用此限制,请输入以下命令:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope 为了永久禁用此限制,请打开文件/etc/sysctl.d/10-ptrace.conf进行编辑,并将行kernel.yama.ptrace_scope = 1更改为kernel.yama.ptrace_scope = 0。要应用更改,请输入: sudo service procps restart或重新启动系统,根据您的选择。

0

简短概述

一行复制粘贴。将此命令粘贴到终端窗口中,运行您的进程,返回终端窗口并输入密码。

pkttyagent --process $(ps -o ppid= $(pgrep -f clion) | sort -n | tail -n1)

解决方案

找到CLion的最顶层(所有打开项目的父级)进程ID(PID),其PPID为1。

$ ps -f $(pgrep -f clion)
UID          PID    PPID  C STIME TTY      STAT   TIME CMD
thisisme  348892       1  7 Jun05 ?        Sl   1041:34 /opt/clion...

启动 pkttyagent 并将此进程作为其参数。
$ pkttyagent --process 348892

使用CLion的运行配置将进程以root身份运行。

Run/Debug Configurations

pkexec进程将会连接到在你的控制台上运行的tty代理,并提示你输入密码。在控制台窗口中输入你的密码,你的进程将继续以root身份在CLion中运行。

0 thisisme@iamhere:~/indir$ pkttyagent --process 348892
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/opt/clion-2022.2.4/jbr/bin/java' as the super user
Authenticating as: thisisme,,, (thisisme)
Password: 
==== AUTHENTICATION COMPLETE ===

发现这个解决方案

在使用 Ubuntu 22.04 和 Mint 21 Vanessa 的过程中,找到了一些有趣的信息。

假设您不是 root 用户,在运行类似 systemctl restart polkit 这样的命令时,会提示您输入密码。在输入密码之前按下 ctrl-c,然后输入 systemctl status polkit,您会看到一个 pkttyagent 进程被启动。

同样,在另一个终端中运行 pkexec ls 并查看状态输出时,您会发现 polkit.service 状态打印了可执行文件和参数,如 pkexec ls。这就是提示我们应该启动另一个进程来代替直接调用 pkexec 的线索。看起来 CLion 在启动 pkexec 之前没有启动代理,所以我们需要自己为 CLion 连接代理。

阅读 pkttyagent 的手册页面,它接收一个监听权限提升请求的 PID。您只需启动一个代理,来自该 PID 的权限提升请求将显示在您的控制台上。

关于构建系统的注意事项

无论是使用 CMake 还是 Makefile 来构建项目都没有关系;设置步骤都是相同的。


-1

您可以创建一个Bash脚本来帮助您。例如,run.sh

#!/usr/bin/env bash
echo $LOGIN_PASSWD | sudo -S yourExecutable --with=some-arguments

不要忘记执行 chmod a+x run.sh 命令,并在 Run/Debug Configurations 中将当前账户的密码导出为环境变量。

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